【问题标题】:Scheme Continuation: What's the difference between call 'call/cc' in top level and non-top level?方案继续:顶层和非顶层的 call 'call/cc' 有什么区别?
【发布时间】:2016-06-05 18:56:53
【问题描述】:

此代码按预期工作:

(define saved #f)
(cons 'wo (call/cc (lambda (k) (set! saved k) '())))
(saved 'ca!)

输出(球拍控制台):

'(wo)
'(wo . ca!)

但是当我将它包装在一个函数中并调用它时,程序永远不会停止。为什么?

(define (test)
    (define saved #f)
    (cons 'wo (call/cc (lambda (k) (set! saved k) '())))
    (saved 'ca!))

(test)

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    延续是在保存它的执行上下文中剩下的所有事情。

    在第一种情况下,调用cons时保存了continuation,所以它只是为了cons 'wo到某事并返回到REPL。

    在第二种情况下,你调用过程test,所以延续是both

    1. 对某事不利
    2. 调用绑定到saved(即延续)的过程,使用'ca!

    所以延续调用自身,因此循环。

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2010-09-12
      相关资源
      最近更新 更多