4
我想實現一個返回OCaml的階乘的功能,但如果我實際使用的延續傳遞風格,我不知道實現一個簡單的階乘函數:使用延續傳遞風格
let fact n =
let rec factorial n cont = match n with
| 0 -> cont()
| _ -> factorial (n-1) (fun() -> cont() * n) in
factorial n (fun() -> 1)
在我看來,我並沒有真正延遲計算,只是取代了我的代碼中的計算。
啊,這似乎更正確的,但我是延續不應該做的「上位」功能(在這種情況下,循環)調用的印象。 – newphew92 2014-12-06 17:36:32
我認爲@ newphew92就在這裏。典型的CPS樣式階乘是[像這樣](https://gist.github.com/gallais/bf1d202cb13c9248b3c3):你首先評估'(n-1)!',然後把這個值乘以'在返回使用提供的延續之前。 – gallais 2014-12-06 21:44:46