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


  • 非常感谢。这很有道理,非常感谢。谢谢!这是有道理的,非常感谢。