司法三等申論題
106年
[檢察事務官電子資訊組] 程式語言
第 五 題
五、Continuation是函數式程式語言的程式技巧。下面這個Scheme程式展示了continuation的使用方法。請問執行此程式的結果為何?並請說明計算的過程。(20 分)
(define qq (lambda (n cont)
(map (lambda (x) (if (negative? x) (cont (* -1 x)) x))
'(54 0 37 -30 -28 83))))
(+ 100 (call-with-current-continuation
(lambda (exit) (qq 5 exit))))
📝 此題為申論題
思路引導 VIP
看到 call-with-current-continuation (call/cc),首要任務是「找出被捕捉的未來計算軌跡(即 Continuation)」。接著追蹤程式執行流,一旦呼叫了 Continuation,執行流將無條件捨棄當前的 Call Stack,直接攜帶參數跳轉回當初捕捉的環境。這種類似 Exception 或提早跳出(Early Exit)的機制是本題的解題關鍵。
🤖
AI 詳解
AI 專屬家教
【破題】
本題核心考點為 Scheme 語言中的 call-with-current-continuation(簡稱 call/cc)。此機制能捕捉當前的「執行環境(Continuation)」,並將其作為一個函數傳入閉包中。當該 continuation 被呼叫時,程式會捨棄目前的呼叫堆疊(Call Stack),直接帶著參數跳躍回被捕捉的執行點,常被用來實作例外處理(Exception Handling)或提早跳出(Early Exit)。
【論述】
▼ 還有更多解析內容