当我在语句中使用第一次开始我认为这是非常简单,是有道理的。然而,这些例子让我怀疑我怎么也理解他们。
let fun1 x = let fun2 y = y + 1 in fun2(x);;
val fun1 : int -> int = <fun>
我认为这可以被认为是宣布FUN2,然后将其应用于呼叫FUN2为您从FUN1获取变量x
的。
let sum1 i = let sum2 j = i+j in sum2;;
val sum1 : int -> int -> int = <fun>
这其中混淆了我更多,并提出更多的问题。我真的不知道如何解释这一点。难道SUM1被宣布SUM2使用?如果是这样,为什么不in
适用于外部函数,而不是内部函数就像它在第一个例子?
在解释这些代码段任何帮助,将不胜感激。
有作为in
声明没有这样的事情。有形式的let
let [rec] pattern = expression {and pattern = expression}
定义和形式let
的let [rec] pattern = expression {and pattern = expression} in expression
表达式(其中[]
意思是“任选的”和{}
表示“零个或多个”)。所以in
只是let
表达式的语法的一部分。
难道SUM1被宣布SUM2使用?
第sum2
定义里面sum1
使用就像在你的第一个例子。 sum1 i
简单的返回sum2
作为其结果。另一种方式把它写不给一个名称返回将是功能:
let sum1 i = fun j -> i + j
甚至:
let sum1 i j = i + j