为何OCaml中最后一个表达式结果为6?技术咨询
OCaml中
let ... and ...的并行绑定逻辑解析 你的疑惑核心在于OCaml中let ... and ...的绑定规则和嵌套let ... in完全不同,具体拆解如下:
先看全局变量的初始绑定:
let x = 2;;这里定义了一个全局的
x,值为2,后续如果没有局部作用域覆盖,这个值会被引用。两种let绑定的核心区别:
- 嵌套的
let ... in let ... in是顺序绑定:后一个变量可以直接引用前一个刚绑定的局部变量。比如你第二个表达式(结合你给出的结果7推测,最后一行应该是x + y):
先把局部let x = 3 in let y = x +1 in x + y;;x绑定为3,y引用这个局部x得到4,最后计算3+4得到7,符合顺序绑定的逻辑。 let ... and ...是并行绑定:所有变量的绑定是同时完成的,互相之间不能引用本次绑定的变量,只能引用绑定之前已存在的变量。
- 嵌套的
最后一个表达式的计算过程:
let x = 3 and y = x + 1 in x + y;;- 这里的
x=3和y=x+1是同时执行绑定的,y中的x无法引用本次刚绑定的x=3,只能引用全局的x=2 - 因此
y=2+1=3 - 最终计算
x+y时,x是本次绑定的3,y是3,结果就是3+3=6
- 这里的
内容的提问来源于stack exchange,提问作者ihab
相关产品推荐
相关产品推荐

