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