Functional programming 为什么这个元组有两个元素?

Functional programming 为什么这个元组有两个元素?,functional-programming,ocaml,Functional Programming,Ocaml,设p=x=1在x+1中,设y=2在y+1中,设4 由于逗号,具有最低的优先级,我将想象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 所以你可以看到一个人是如何“属于”另一个人的 (2,(3,4))正是我所期望的。试着在多行上写出来,用缩进

设p=x=1在x+1中,设y=2在y+1中,设4

由于
逗号,
具有最低的优先级,我将想象
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
所以你可以看到一个人是如何“属于”另一个人的


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

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

let p = 
    let x = 1 in x + 1, 
        let y = 2 in y + 1, 4
所以你可以看到一个人是如何“属于”另一个人的


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

我希望
let…in…
具有以下语法

letbinding=expressioninexpression

街区尽可能向右转

在您的示例中,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…in…
具有以下语法

letbinding=expressioninexpression

街区尽可能向右转

在您的示例中,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 x
表达式,尽管我可能会用不同的措辞。但这是深层次的原因,我用缩进写出来的原因是为了让结构揭示这个原因。我对我的答案补充了一点,希望能使它更有用。谢谢,但我认为你没有解释其根源。我的意思是,深层次的推理是否属于
let x
表达式,尽管我可能会用不同的措辞。但这是深层次的原因,我用缩进写出来的原因是为了让结构揭示这个原因。我在我的答案中增加了一点,希望能使它更有用。