2

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

(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 方案。

4

1 回答 1

1

call/cc以当前延续作为其唯一参数调用给定函数。因此,k这是当前的延续。当您使用值调用它时,call/cc将返回您提供的值。(不过,由于您没有call/cc在上面的代码中使用 ' 返回值,并且由于 R6RS 在这种情况下允许零值返回,因此您可以saved-cont不带参数调用并仍然执行您期望的操作。)

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

于 2012-04-30T14:04:37.050 回答