[英]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.