当我第一次开始使用in语句时,我认为它非常简单并且很有意义。但是,这些代码示例让我怀疑我对它们的理解程度。
let fun1 x = let fun2 y = y + 1 in fun2(x);;
val fun1 : int -> int = <fun>
我认为可以将其声明为fun2,然后将其应用于具有来自fun1的变量x
的fun2调用。
let sum1 i = let sum2 j = i+j in sum2;;
val sum1 : int -> int -> int = <fun>
这使我更加困惑,并提出了更多问题。我真的不知道该怎么解释。是sum1被声明为在sum2中使用吗?如果是这样,为什么in
适用于外部函数而不适用于内部函数,如在第一个示例中一样?
在解释这些代码段方面的任何帮助将不胜感激。
答案 0 :(得分:3)
没有in
语句之类的东西。有let
形式的let [rec] pattern = expression {and pattern = expression}
定义和let
形式的let [rec] pattern = expression {and pattern = expression} in expression
表达式(其中[]
表示“可选”,而{}
表示“零或更多”)。因此,in
仅仅是let
表达式语法的一部分。
是在sum2中声明要使用sum1吗?
不。与第一个示例一样,sum2
被定义为在sum1
内部使用。 sum1 i
只是返回sum2
作为结果。在不给要返回的函数命名的情况下写它的另一种方法是:
let sum1 i = fun j -> i + j
甚至:
let sum1 i j = i + j