OCaml语法混乱

时间:2019-02-04 22:38:17

标签: syntax functional-programming ocaml

当我第一次开始使用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适用于外部函数而不适用于内部函数,如在第一个示例中一样?

在解释这些代码段方面的任何帮助将不胜感激。

1 个答案:

答案 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