(let ((x 2) (y 3)
(let ((x 7)
(z (+ x y)))
(* z x)))使用上面的代码,为什么答案是35,而不是70?在第二个let中,x是7,所以z应该是7+3= 10,然后结果应该是7* 10 = 70。我知道得到另一个是让*我很困惑这2个。样本是从谷歌抓取的。我已经在谷歌上搜索了,但就是找不到。
发布于 2011-11-07 21:18:59
在调用(+ x y)时,x仍然绑定到外部let。
发布于 2011-11-07 21:23:16
扩展一下勒皮的答案:如果你写了
(let ((x 2) (y 3))
(let* ((x 7)
(z (+ x y)))
(* z x)))你会得到你所期望的答案。内部let*恰好等同于
(let ((x 7))
(let ((z (+ x y)))
(* z x)))事实上,在某些方案中可能会以这种方式实现。
换句话说,在let*表单中,第一个绑定之后的每个后续绑定都在先前创建的所有绑定的作用域中。
https://stackoverflow.com/questions/8036840
复制相似问题