Functional programming 为什么这个元组有两个元素?
设p=x=1在x+1中,设y=2在y+1中,设4 由于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
具有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
表达式,尽管我可能会用不同的措辞。但这是深层次的原因,我用缩进写出来的原因是为了让结构揭示这个原因。我在我的答案中增加了一点,希望能使它更有用。