0

let p = let x = 1 in x + 1, let y = 2 in y + 1, 4

由于comma ,具有最低优先级,我将图像p具有3元素:(2, 3, 4).

但实际上,p只有2元素:(2, (3, 4))

为什么?

为什么最后一个,属于let y表达式,而不是它之外?

4

2 回答 2

3

我希望let...in...有以下语法

绑定= 表达式 中的 表达式

并且该块尽可能向右移动。

在您的示例中,OCaml 解析器期望

let y = 2 in y + 1, 4

成为一个表达式并将其解析为(3, 4)成功。

与显式括号的示例等效的是

let p = (let x = 1 in x + 1, (let y = 2 in y + 1, 4))

如果你想返回最终结果,你应该在适当的地方(2, 3, 4)放一个括号来停止块:let...in...

let p = let x = 1 in x + 1, (let y = 2 in y + 1), 4
于 2013-01-16T16:42:00.250 回答
0

尝试在多行上写出,并使用缩进来显示关系:

let p = 
    let x = 1 in x + 1, 
        let y = 2 in y + 1, 4

所以你可以看到一个人如何让“属于”另一个人。

(2, (3,4)) 正是我所期望的。

于 2013-01-16T16:26:24.730 回答