繁体   English   中英

方案继续:顶层的“ call / cc”呼叫与非顶层的“ call / cc”呼叫有什么区别?

[英]Scheme Continuation: What's the difference between call 'call/cc' in top level and non-top level?

此代码按预期工作:

(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)

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

在第一种情况下,在调用cons时保存了延续,因此,这仅是为了使cons'wo whats并返回REPL。

在第二种情况下,调用程序test ,所以延续既是

  1. 不利于某事
  2. 用“ ca”调用绑定到已saved (即继续)的过程!

因此,延续会自我调用,从而产生循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM