2012-04-30 46 views
4

也許我的問題有一個非常簡單的答案,但我找不到它。編碼不做任何事的延續

在Scheme R6RS中,我該如何構建一個無所事事,需要任何參數的延續?

我的目標是有一個延續,我們將其命名爲QUIT這樣的,如果我有以下代碼:你

((lambda() 
    (display 1) 
    (display 2) 
    (QUIT) 
    (displey "A"))) 

它preints 1和2,但不是「A」 +

燦幫我?

謝謝。

回答

5

的最直接方式是使用一個簡單的「迴歸」風格的延續:

(call/cc (lambda (return) 
    (display 1) 
    ... 
    (return) 
    (display "A"))) 

是否幫助呢?

+0

是的,謝謝。我對可以重用的返回函數的定義感興趣;所以,從你的回答中得到靈感我做了:'(define quit #f)'然後'(call/cc(lambda(k)(set!quit k)))'。 – Aslan986

+0

@Justin發生了什麼情況:調用/ cc支持上下文,並且在lambda內調用(返回)會使程序繼續跳轉到調用/ cc後面的指令,對嗎? – dader

+1

@dader - 是的,這是繼續最簡單和最直接的用法之一。實際上,它可以被稱爲「逃生延續」,因爲它將控制權恢復到封閉範圍。 –