簡體   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