免費開始練習
司法三等申論題 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)。 【論述】

▼ 還有更多解析內容

升級 VIP 解鎖