阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 普通考試_資訊處理:程式設計概要#88788
科目:程式設計
年份:109年
排序:0

申論題內容

三、請問下列程式執行後,印出結果為何?(作答必須解釋計算過程,只寫答 案而未加解釋,只能得部分分數。)5f1939fb25d5c.jpg

詳解 (共 2 筆)

詳解 提供者:fun40431
故結果為2
詳解 提供者:hchungw
cont 在 Scheme 中是一個代表續程的函數,它不是一個數值。當 call/cc 被呼叫時,它將當前的續程(一個可以在未來的任何時刻恢復當前計算的函數)作為參數傳遞給它的參數,這裡是一個匿名函數(lambda)。
在匿名函數中,set! 命令將 return 變量設置為這個續程。這意味著在之後的計算中,任何時候呼叫 return 都將使計算跳轉回 call/cc 的位置,並用 return 的參數替換原本的 call/cc 的返回值。
匿名函數返回 1。所以 call/cc 表達式的結果就是 1,它與外部的 + 1 結合後得到 2。這個結果是在沒有呼叫 return 的情況下計算得到的。
然後程式運行到 (return 22)。由於 return 已經被設置為先前的續程,這行代碼將會結束當前的計算並返回 22,替代了原本 call/cc 的返回值 2。
所以,最終的輸出結果是 22,而不是 2。這是因為 return 的呼叫繞過了原本的計算過程,直接返回了 22。