[英](call/cc): What exactly is continuation?
在SO上已經問過幾次這個問題,但是沒有一個解決我的問題。 什么是延續?
考慮以下代碼:
( (lambda (pair)
(begin (print (car pair))
((cdr pair) (cons (+ 1 (car pair))
(cdr pair)))))
(call/cc (lambda (k)
(cons 0 k))))
該程序無限循環打印從0開始的整數序列。
我的理解是:
步驟1: (call/cc (lambda (k) (cons 0 k)))
被求值,返回對(0 . #continuation)
(這里的#continuation
)
步驟2:將步驟1中的配對應用於lambda函數。 lambda函數首先打印出car
,即0。
現在,我完全迷路了 。 程序正在評估(#continuation (1 . #continuation))
,這對我來說真的沒有意義。 #continuation
現在是程序嗎?
是什么讓程序繼續將(call/cc (lambda (k) (cons 0 k)))
應用於lambda函數? 這樣它就可以繼續自稱
我想我已經知道了。
繼續是程序的當前狀態
鑒於此,我們首先要問:程序的延續是什么,還是當前狀態是什么?
它是一個等待對的lambda函數。
#continuation = ( lambda-function <placeholder>)
<placeholder>
將成為我們將傳遞給該lambda函數的函數,但我們尚未這樣做。
現在我們的程序開始運行,它評估lambda函數,然后通過call / cc評估對返回,即(0 . #continuation)
。
(print (car pair))
=>接下來,lambda函數打印出0
((cdr pair) (cons (+ 1 (car pair)) (cdr pair)))))
=>這里, (cdr pair)
是我們的continuation
,即(lambda-function <placeholder>)
,然后我們的程序通過一對新的。 然后程序開始其無限循環
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.