为啥这个 SML 代码评估为 7 而不是 6?
Posted
技术标签:
【中文标题】为啥这个 SML 代码评估为 7 而不是 6?【英文标题】:Why doe this SML code evaluate to 7 and not 6?为什么这个 SML 代码评估为 7 而不是 6? 【发布时间】:2022-01-22 15:58:18 【问题描述】:我已看到此 SML 代码作为内部绑定遮蔽外部绑定的示例。
let val x = 1
in
(let val x=2 in x+1 end) + (let val y = x+2 in y+1 end)
end
在示例之后,作者写道,上面的代码计算结果为“7”,当我运行它时,我得到了相同的结果:
: val it = 7 : int
我不明白为什么。如果 x “遮蔽”了外部绑定,那么在最初的 let
中,它应该是 2
,对吗?所以函数应该是:
2 + 1
3
3 + 2 (x = 3, y = x + 2, so y = 3 + 2 = 5)
5
5 + 1 (y = 5, 5 + 1 = 6)
6
即使我误解了阴影的工作原理,最终结果也应该是 5,而不是 6,而不是 7。那么这里发生了什么?
【问题讨论】:
【参考方案1】:正如有时发生的那样,写下问题最终会得到答案。
该块应按如下方式评估:
x = 2
x + 1
2 + 1
result: 3
result: 3 + ( y + 1), y = (x + 2) where x=1 (from above)
3 + ( 1 + 2) + 1
7
【讨论】:
归根结底,关键是范围。以上是关于为啥这个 SML 代码评估为 7 而不是 6?的主要内容,如果未能解决你的问题,请参考以下文章