gpt4 book ai didi

ocaml - ocaml 中的延迟评估

转载 作者:行者123 更新时间:2023-12-02 20:35:11 25 4
gpt4 key购买 nike

我正在遵循“使用 Objective-CAML 开发应用程序”第 107 页上的示例。

type 'a v = Imm of 'a| Def of (unit -> 'a)

现在我试图了解构造函数类型 Def 如何强制延迟求值?使用 (unit -> 'a) 参数化 Def 意味着什么?

最佳答案

类型unit -> 'a 表示一个函数。因此,在调用该函数之前,计算不会发生。也就是说,它被推迟了。

unit 意味着当您调用该函数时,您将传递 () (unit 类型的值,实际上是类型)。

'a 表示函数返回类型构造函数 v 的参数给定类型的值。所以 int v 是返回 int 的延迟计算的类型。等等。

更新

这是一个 float v 类型的值:

let deferred_float = Def (fun () -> sin 1.0)

请注意,Def 不是类型。它是一个一元值构造函数(如 Some)。将 Def 视为一个函数通常很有用,该函数接受 unit -> 'a 类型的值并返回 'a v 类型的值>。或者您可以将其视为保存函数的小型标记数据结构。无论哪种情况,它都是一个值,而不是一个类型。

这是它在顶层的样子:

# let deferred_float = Def (fun () -> sin 1.0);;
val deferred_float : float v = Def <fun>

如果您认为计算 sin 1.0 需要很长时间(例如一分钟),那么关键是值 deferred_float 或多或少是瞬时构造的。 sin 1.0 的计算被推迟,直到您实际调用包含的函数为止。

关于ocaml - ocaml 中的延迟评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46308092/

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