OCaml中函数返回的解密

OCaml中函数返回的解密,ocaml,Ocaml,我试图解密下面的calc函数的返回,但我很困惑。 我有一个f函数,它接受3个整数并返回一个整数。 我认为计算函数应该返回valcalc:int->int=,因为f必须取3个int,我给它x和y,所以现在它需要再返回一个int,最后的结果。为什么这个逻辑不正确? 我无法理解实际的输出,特别是当我强制f中的参数为整数时的多病态值 # let f (x : int) (y : int) (z : int) = x + y + z;; val f : int -> int -> int -&

我试图解密下面的calc函数的返回,但我很困惑。 我有一个f函数,它接受3个整数并返回一个整数。 我认为计算函数应该返回
valcalc:int->int=
,因为f必须取3个int,我给它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>
设f(x:int)(y:int)(z:int)=x+y+z;; val f:int->int->int->int= #设calc x y f=f x y;; val calc:'a->'b->('a->'b->'c)->'c=
在表达式
中,让计算x y f=f x y
f
是一个局部绑定变量(
calc
绑定
x
y
,然后绑定
f
),而不是您以前定义的函数


如果你写了
让calc x y=f x y则您将得到预期的结果。

在表达式
中,让calc x y f=f x y
f
是一个局部绑定变量(
calc
绑定
x
y
,然后绑定
f
),而不是您以前定义的函数


如果你写了
让calc x y=f x y则会得到预期结果。

函数
calc
不包含对函数
f
的引用。有一个名为
f
的参数,它可以被命名为
g
,而不做任何更改:
让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

函数
calc
不包含对函数
f
的引用。有一个名为
f
的参数,它可以被命名为
g
,而不做任何更改:
让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

,谢谢。让我看看我是否理解了calc的逻辑。它需要一些a,一些b和一些函数,这些函数需要前面的a和b来输出一些东西,'c'反过来就是计算的返回值。这是对的吗?它确实是这样做的。:)现在说得通了,谢谢。让我看看我是否理解了calc的逻辑。它需要一些a,一些b和一些函数,这些函数需要前面的a和b来输出一些东西,'c'反过来就是计算的返回值。这是对的吗?它确实是这样做的。:)那么这个等价的代码呢,让f(x:int)(y:int)(z:int)=x+y+z,让calc x y g=gxy
?calc定义中的参数f(这里是g)创建了一个新绑定,该绑定将隐藏前面声明的f。它们没有共同点。那么这个等价的代码是什么呢?让f(x:int)(y:int)(z:int)=x+y+z让calc x y g=gx y
?calc定义中的参数f(这里是g)创建了一个新绑定,该绑定将隐藏前面声明的f。他们没有共同之处。