![](/img/trans.png)
[英]Simplest example of backwards continuations in Scheme without explicit mutation
[英]Example of Continuations in Scheme
我在理解教授用作示例的這段代碼時遇到了一些麻煩:
(define saved-cont #f)
(define (test-cont)
(let ((x 0))
(call/cc
(lambda (k)
(set! saved-cont k)))
(set! x (+ x 1))
(display x)
(newline)))
如果我們第一次運行(test-cont)
, k
包含什么?
注意:我正在使用R6RS方案。
call/cc
使用當前延續作為其唯一參數來調用給定函數。 因此,這里的k
是當前的延續。 當您使用值調用它時, call/cc
將返回您提供的值。 (但是,由於在上面的代碼中沒有使用call/cc
的返回值,並且由於R6RS在這種情況下允許零值返回,因此您可以不帶任何參數地調用saved-cont
,並且仍然可以做您期望的事情。 )
在這里,基本上,每次調用(saved-cont)
, call/cc
下面的代碼將再次運行。 因此, x
將遞增,並顯示其新值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.