[英]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
,所以延续既是
saved
(即继续)的过程! 因此,延续会自我调用,从而产生循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.