让p = let x = 1 in x + 1,让y = 2 in y + 1,4
由于comma ,
具有最低优先级,因此我会将p
图片3
元素设为(2, 3, 4)
。
但事实上,p
只有2
个元素:(2, (3, 4))
为什么吗
为什么上一个,
属于let y
表达式,但不属于它?
答案 0 :(得分: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
答案 1 :(得分:0)
尝试在多行上书写,并使用缩进来显示关系:
let p =
let x = 1 in x + 1,
let y = 2 in y + 1, 4
所以你可以看到一个人如何“属于”另一个人。
(2,(3,4))正是我所期待的。