令P =令x = 1 X + 1,令y =沿y + 1 2,4为什么这个元组有2个元素?
由于comma ,
具有最低的优先级,我会图像p
具有3
元素:(2, 3, 4)
。
但事实上,p
只有2
元素:(2, (3, 4))
为什么?
为什么最后,
属于let y
表达式,但不是在它之外?
令P =令x = 1 X + 1,令y =沿y + 1 2,4为什么这个元组有2个元素?
由于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))正是我所期望的。
谢谢,但我不认为你已经解释了根。我的意思是内在的深层原因 –
让y + 1,4中的y = 2属于'let x'表达式吗? –
是的,尽管我可能会略有不同。但这是深层次的原因,我用缩进来写出来的原因是为了让结构揭示这个原因。我在答案中增加了一些,希望能使它更有用。 – RonaldBarzell