解密 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
绑定x
,y
然后f
) 而不是您之前定义的函数。
如果你写了 let calc x y = f x y;;
那么你会得到预期的结果。
函数 calc
不包含对函数 f
的引用。有一个名为 f
的参数,可以在不更改任何内容的情况下将其命名为 g
:let 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
.
我正在尝试解密下面的 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
绑定x
,y
然后f
) 而不是您之前定义的函数。
如果你写了 let calc x y = f x y;;
那么你会得到预期的结果。
函数 calc
不包含对函数 f
的引用。有一个名为 f
的参数,可以在不更改任何内容的情况下将其命名为 g
:let 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
.