此代码按预期工作:
(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)
答案 0 :(得分:4)
继续是在保存的执行环境中完成的所有工作。
在第一种情况下,在致电cons
时会保存续集,因此只是为了减少某些事情并返回到REPL。
在第二种情况下,您调用过程test
,因此延续两者
saved
的程序(即继续)
醇>
所以继续调用自身,因此循环。