我試圖理解延續傳遞和呼叫與電流延續。 按本頁: https://en.wikipedia.org/wiki/Monad_(functional_programming)#Continuation_monad 與CC方法呼叫被實現如下:當前延續調用忽略它自己的延續?
call_cc :: ((a -> (b -> r) -> r) -> (a -> r) -> r) -> (a -> r) -> r
call_cc f k = f (\t x -> k t) k
正如本signature和implementation說明。
但是,我們可以看到x
參數在這裏從來沒有使用過。 這是否意味着任何延續傳遞給f
總是被忽略,最初的延續k
總是替代它? 在這種情況下,這是否意味着call-with-cc
只能調用一個級別較深且不多的功能? (因爲在正常控制流程中調用的下一個函數將被忽略)
在這種情況下,它似乎非常有限,它的實際用途是什麼?
謝謝! 在這個例子中:https://en.wikibooks.org/wiki/Haskell/Continuation_passing_style#Deciding_when_to_use_k 這是否意味着調用k將返回到先前的contiunation(當前的),並且「return(show $ y - 4 )「將顯示y-4並結束程序? – lezebulon
@lezebulon在'callC'ed'do'塊中調用'k'將完全忽略此次調用後的所有操作。所以'return(show $ y - 4)'只會在'y> 20'條件爲'假' – Odomontois
是的時候完成,但是當被調用時會返回什麼?它和k一樣嗎? – lezebulon