OCaml的语法混乱

问题描述 投票:-1回答:1

当我在语句中使用第一次开始我认为这是非常简单,是有道理的。然而,这些例子让我怀疑我怎么也理解他们。

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适用于外部函数,而不是内部函数就像它在第一个例子?

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

syntax functional-programming ocaml
1个回答
3
投票

有作为in声明没有这样的事情。有形式的let let [rec] pattern = expression {and pattern = expression}定义和形式letlet [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
© www.soinside.com 2019 - 2024. All rights reserved.