2013-01-16 49 views
0

令P =令x = 1 X + 1,令y =沿y + 1 2,4为什么这个元组有2个元素?

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

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

为什么?

为什么最后,属于let y表达式,但不是在它之外?

回答

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 
0

尝试多条线路上写出,与缩进来显示关系:

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

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

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

+2

谢谢,但我不认为你已经解释了根。我的意思是内在的深层原因 –

+0

让y + 1,4中的y = 2属于'let x'表达式吗? –

+0

是的,尽管我可能会略有不同。但这是深层次的原因,我用缩进来写出来的原因是为了让结构揭示这个原因。我在答案中增加了一些,希望能使它更有用。 – RonaldBarzell

相关问题