gpt4 book ai didi

functional-programming - 了解多提示分隔的延续的 API

转载 作者:行者123 更新时间:2023-12-04 19:15:12 24 4
gpt4 key购买 nike

论文 Delimited Control in OCaml, Abstractly and Concretely System Description 中描述了用于多提示分隔延续的 API。 .

我的问题涉及 push_subcont : ('a,'b) subcont -> (unit -> 'a) -> 'b 的类型.为什么不是这种类型('a,'b) subcont -> 'a -> 'b ?此外,为什么有一个单独的 subconts 类型:为什么不简单地 ('a,'b) subcont = 'a -> 'b ?我几乎可以肯定这是有充分理由的,因为 Oleg 使事情尽可能优雅(但不是更优雅)。

谢谢!

最佳答案

为什么不('a,'b) subcont -> 'a -> 'b ?

我认为这与 push_prompt 的原因相同——这更容易理解。 push_prompt p (fun () -> e)直观上是 try e with p 的一种形式: 提示 p作为处理程序放置在堆栈中,并且 e在此处理程序下运行。如果您使用 push_prompt p e相反,严格的语言将评估参数 pe首先,和 e将在设置提示之前运行并“引发异常”。
push_subcont sk (fun () -> e)可能有同样的问题:直观地说,这是一种“重新启动被异常中断的计算 sk”。重要的是 e在计算上下文内运行,而不是在计算上下文外运行,例如,如果它希望引发与 sk 安装的处理程序相对应的异常.

为什么不简单地('a,'b) subcont = 'a -> 'b ?

如果只有一种方法可以重新启动子延续,则可以这样做:它们可以“预先重新启动”,以函数的形式返回,当应用时,使用给定的参数重新启动。

但事实并非如此:有 push_subcontpush_delim_subcont ,在文章末尾描述,具有不同的语义。 “调用者”应该选择使用哪种重启技术。它们都需要访问 subcontiuation 的内部数据,因此它们无法对 subcontinuation-as-function 表示进行操作。

关于functional-programming - 了解多提示分隔的延续的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568493/

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