解密 OCaml 中的函数 return

Decrypting return of function in OCaml

我正在尝试解密下面的 return 计算函数,但我很困惑。 我有 f 函数,它接受 3 个整数和 returns 一个整数。 我认为计算函数应该 return val calc : int -> int = <fun> 因为 f 必须取 3 个整数,我给它 x 和 y 所以现在它需要一个 return 另一个整数,最终结果.为什么这个逻辑不正确? 我无法理解实际输出,特别是当我强制 f 中的参数为整数时的多态值。

# let f (x : int) (y : int) (z : int) = x + y + z;;
val f : int -> int -> int -> int = <fun>
# let calc x y f = f x y;;
val calc : 'a -> 'b -> ('a -> 'b -> 'c) -> 'c = <fun>

在表达式let calc x y f = f x y;;中,f是一个本地绑定变量(calc绑定xy然后f ) 而不是您之前定义的函数。

如果你写了 let calc x y = f x y;; 那么你会得到预期的结果。

函数 calc 不包含对函数 f 的引用。有一个名为 f 的参数,可以在不更改任何内容的情况下将其命名为 glet calc x y g = g x y。如果你想使用上面定义的函数 f 而不是任何正确类型的函数,你不能将 f 作为参数传递,你应该像这样重写 calc

let f x y z = x + y + z
let calc x y = f x y

然后 calc 将具有 int -> int -> (int -> int) 类型,通常写为 int -> int -> int -> int.