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
表达式,而不是它之外?
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
表达式,而不是它之外?
我希望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
尝试在多行上写出,并使用缩进来显示关系:
let p =
let x = 1 in x + 1,
let y = 2 in y + 1, 4
所以你可以看到一个人如何让“属于”另一个人。
(2, (3,4)) 正是我所期望的。