![](/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.