Types 为什么此OCaml表达式具有以下类型?
表达式是Types 为什么此OCaml表达式具有以下类型?,types,ocaml,Types,Ocaml,表达式是fxy=1+(x1)+(y1),其类型为(int->int)->(int->int)->int。我不明白它怎么会有那种类型。为什么不是int->int?表达式(x1)要求x是int->'a类型的函数。对于(y 1),情况类似。其余部分如下。表达式(x1)要求x是int->'a类型的函数。对于(y 1),情况类似。其余部分如下。因为您有函数应用程序(x1)和(y1)。x和y被视为接受int参数并返回int的函数 所以x是类型(int->int),y是类型(int->int)。 1应用于x和
fxy=1+(x1)+(y1)
,其类型为(int->int)->(int->int)->int
。我不明白它怎么会有那种类型。为什么不是int->int
?表达式(x1)
要求x是int->'a
类型的函数。对于(y 1)
,情况类似。其余部分如下。表达式(x1)
要求x是int->'a
类型的函数。对于(y 1)
,情况类似。其余部分如下。因为您有函数应用程序(x1)和(y1)。x和y被视为接受int参数并返回int的函数
所以x是类型(int->int),y是类型(int->int)。
1应用于x和y。因此,如果1应用于类型为(int->int)的对象,则得到类型为int的对象。因此,整个函数返回1+int+int,这基本上是int。,因为有函数应用程序(x1)和(y1)。x和y被视为接受int参数并返回int的函数 所以x是类型(int->int),y是类型(int->int)。
1应用于x和y。因此,如果将1应用于类型为(int->int)的对象,则得到类型为int的对象。因此,当OCaml推断表达式的类型时,整个函数返回1+int+int,这基本上是int。
let f x y = 1 + (x 1) + (y 1)
它会这样想:
(+)
具有类型int->int
,表达式(x1)
应具有类型int
,因为它出现在+
的右侧x1
的计算结果应为int
,并且它是一个应用程序,因此它的类型应为\->int
。由于1
是一个int
文本,因此它具有类型int->int
y
也有类型int->int
当OCaml推断表达式的类型时
let f x y = 1 + (x 1) + (y 1)
它会这样想:
(+)
具有类型int->int
,表达式(x1)
应具有类型int
,因为它出现在+
的右侧x1
的计算结果应为int
,并且它是一个应用程序,因此它的类型应为\->int
。由于1
是一个int
文本,因此它具有类型int->int
y
也有类型int->int
(x1)
,因此x必须是一个函数1+(x1)
,因此(x1)
必须返回一个int,而且1是int,因此x:int->int
y:int->int
fxy
,所以f是一个函数,我们已经知道x和y是什么类型,也知道=
的右边必须是int,所以f:(int->int)->(int->int)->int
(x1)
,因此x必须是一个函数1+(x1)
,因此(x1)
必须返回一个int,而且1是int,因此x:int->int
y:int->int
fxy
,所以f是一个函数,我们已经知道x和y是什么类型,也知道=
的右边必须是int,所以f:(int->int)->(int->int)->int
非常感谢。这很有道理,非常感谢。谢谢!这是有道理的,非常感谢。