gpt4 book ai didi

ocaml - ocaml 中的延续传递样式

转载 作者:行者123 更新时间:2023-12-02 06:28:46 28 4
gpt4 key购买 nike

我对这个概念有点困惑。所以我有以下功能

    let rec sumlist lst =
match lst with
| [] -> 0
| (h::t) -> h + (sumlist t)

有了延续,它可以写成

let rec cont_sumlist lst c =
match lst with
| [] -> (c 0)
| (h::t) -> cont_sumlist t (fun x -> c (h + x))

我仍然对 c 的含义和作用感到困惑

最佳答案

查看连续传递样式的一种方法是想象如果不允许函数返回,您将如何编写代码。您仍然可以通过为每个函数添加一个额外参数来让事情正常进行,该参数告诉您在函数完成计算后您想要做什么。也就是说,您传递一个函数作为整体计算的“延续”。

你给的代码就是这样写的,c是continuation。也就是说,它是调用者传入的一个函数,它告诉函数在完成其预期计算后下一步要做什么。

Continuation-passing 风格是完全通用的,即所有的计算都可以用这种方式表达。而且,事实上,存在从普通功能代码到连续传递样式的机械转换。

关于ocaml - ocaml 中的延续传递样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46946065/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com