2012-11-15 22 views
1

所以我處理的延續,並有這樣的事情:延續方案與拉姆達不帶參數

(or 
    (call/cc (lambda (cont) 
      ... 
      (if (...) 
       (cons randomList (lambda() (cont #f))) 
       #f)})} 
    (do something else) 

我想知道有什麼區別(拉姆達()(續#F))和(續#f)是。我用lambda得到了我想要的答案,沒有找到錯誤。有人可以解釋這個區別嗎?謝謝。

回答

1

以這種方式使用的無限(零參數)lambda稱爲thunk

在Scheme中使用Thunk來推遲執行某段代碼。例如,假設我們正在談論(display #f)而不是(cont #f)。如果您直接編寫了(display #f),那麼當代碼執行達到該點時,它將立即顯示#f,而如果您將其包裝在一個thunk中((lambda() (display #f))),它將不會顯示#f,直到您調用該thunk。

回到代碼中,代碼中的(cont #f)會導致立即跳轉到繼續被調用的位置。將它包裝在thunk中會延遲對連續的調用,直到調用thunk。

+0

感謝您的解釋。所以這意味着(做其他事情)將在稍後調用thunk時被調用。它是否正確? – bph

+0

好的,這似乎是基於我對你的代碼的理解。 –