【问题标题】:Example of Continuations in SchemeScheme 中的延续示例
【发布时间】:2012-04-30 10:05:01
【问题描述】:

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

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

【问题讨论】:

    标签: scheme continuations


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2010-11-02
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 2016-08-27
      • 2011-08-25
      相关资源
      最近更新 更多