我完全失去了对这个。有人解释说,功能是正确的,所以let add x y = x + y;;
有一个函数类型int -> int -> int
或int -> (int -> int)
。OCaml的 - 给类型的函数(INT - > INT) - > INT
我不知道我怎么会定义(int -> int) -> int
类型的函数。我想我会有第一个参数是一个函数,通过int
并返回int
。我已经试过:
let add = fun x y -> x + y
--- int -> int -> int
let add = fun f x = (f x) + 3
--- ('a -> int) -> 'a -> int
类型add'的'是正常的:'F'可以,只要它返回一个'int'能够执行加法带走任何东西。例如'add int_of_string“2”'是有效的。编译器生成最常用的类型,并且没有任何限制'x'的类型。如果你写了'let add f x = f(x + 1)+ 3',那将是不同的。 – ChriS