使用 let 绑定定义函数

可以使用 let 为值指定值:

# let a = 1;;
val a : int = 1 

你可以使用类似的语法来定义函数。只需为参数提供其他参数。

# let add arg1 arg2 = arg1 + arg2;;
val add : int -> int -> int = <fun> 

我们可以这样称呼它:

# add 1 2;;
- : int = 3 

我们可以像这样直接传递值,或者我们可以传递绑定到名称的值:

# add a 2;;
- : int = 3 

在我们定义某些内容之后,解释器为我们提供的行是具有其类型签名的对象的值。当我们给它一个与 a 绑定的简单值时,它回来了:

val a : int = 1

这意味着 a 是一个 int,它的值是 1

我们函数的类型签名有点复杂:

val add : int -> int -> int = <fun> 

add 的类型签名看起来像一堆整数和箭头。这是因为带有两个参数的函数实际上是一个函数,它只接受一个参数,但返回另一个接受下一个参数的函数。你可以这样读它:

val add : int -> (int -> int) = <fun>

当我们想要动态创建不同类型的函数时,这非常有用。例如,一个向所有内容添加 5 的函数:

# let add_five = add 5;;
val add_five : int -> int = <fun>
# add_five 5;;
- : int = 10
# add_five 10;;
- : int = 15