解密OCaml中的函数返回

时间:2016-02-22 09:17:59

标签: ocaml

我试图解密下面的calc函数的返回,但我非常困惑。 我有f函数,需要3个int并返回一个int。 我认为计算函数应该返回val calc : int -> int = <fun>,因为f必须采用3个整数,我给它x和y所以现在需要多一个返回另一个int,即最终结果。为什么这个逻辑不正确? 我无法理解实际输出,特别是当我将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>

2 个答案:

答案 0 :(得分:1)

在表达式let calc x y f = f x y;;中,f是一个局部绑定变量(calc绑定xy然后f)比你之前定义的功能。

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

答案 1 :(得分:1)

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

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

然后calc将使用int -> int -> (int -> int)类型,更常见的是int -> int -> int -> int