我用的球拍,我得到的結果爲4
以下簡單的代碼:執行下面的呼叫/ cc的EXP
(let/cc done
((let/cc esc
(done (+ 1 (let/cc k
(esc k)))))
3))
和我要執行這個代碼一步一步的。
首先,我改變了第一let/cc
成call/cc
形式象下面這樣:
(call/cc (λ (done)
((let/cc esc
(done (+ 1 (let/cc k
(esc k)))))
3)))
當然,這產生4
也。
其次,因爲我發現call/cc
機制在internet它說call/cc
做以下4個步驟:
- 捕獲當前的延續。
- 構造一個函數
C
,它接受一個參數,並將該當前延續與該參數值一起應用。 - 將此函數作爲參數傳遞給
expr
---即調用(expr C)
。 - 返回評估結果
(expr C)
,除非expr
調用C
,在這種情況下返回傳遞給C
的值。
因此,我已按照上述針對第一call/cc
等步驟:
- 電流繼續是一個身份。
C
指的是(λ (x) x)
。- 由於
expr
(λ (done) ((let/cc esc (done (+ 1 (let/cc k (esc k))))) 3))
是,(expr C)
是:
。
((λ (done)
((let/cc esc
(done (+ 1 (let/cc k
(esc k)))))
3))
(λ (x) x))
- 要返回的上面的代碼的結果值,在我球拍以上執行。
但是,上面的代碼(由我修改)不執行,併產生一個錯誤:
application: not a procedure;
expected a procedure that can be applied to arguments
given: 4
arguments...:
3
請我做錯了什麼。我混淆了延續的概念。謝謝。