方案中的延续示例

时间:2012-04-30 10:05:02

标签: scheme continuations

我在理解这段代码时遇到了一些麻烦,我的教授用这个代码作为例子:

(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计划。

1 个答案:

答案 0 :(得分:1)

call/cc以当前continuation作为唯一参数调用给定函数。因此,k这里是当前的延续。当您使用值调用它时,call/cc将返回您给出的值。 (虽然,因为你没有在上面的代码中使用call/cc的返回值,并且由于R6RS在这种情况下允许零值返回,所以你可以只调用saved-cont而没有参数你期待什么。)

在此,基本上,每次拨打(saved-cont)时,call/cc下面的代码都会再次运行。因此,x将递增,并显示其新值。