我在理解这段代码时遇到了一些麻烦,我的教授用这个代码作为例子:
(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计划。
答案 0 :(得分:1)
call/cc
以当前continuation作为唯一参数调用给定函数。因此,k
这里是当前的延续。当您使用值调用它时,call/cc
将返回您给出的值。 (虽然,因为你没有在上面的代码中使用call/cc
的返回值,并且由于R6RS在这种情况下允许零值返回,所以你可以只调用saved-cont
而没有参数你期待什么。)
在此,基本上,每次拨打(saved-cont)
时,call/cc
下面的代码都会再次运行。因此,x
将递增,并显示其新值。