(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。样本是来自谷歌的抓取。我已经google但是无法得到它。
答案 0 :(得分:5)
扩展Leppie的回答:如果你写过
(let ((x 2) (y 3))
(let* ((x 7)
(z (+ x y)))
(* z x)))
你会得到你期望的答案。内部let*
完全等同于
(let ((x 7))
(let ((z (+ x y)))
(* z x)))
实际上可能会在某些方案中以这种方式实现。
换句话说,在let*
形式中,第一个之后的每个连续绑定都在所有先前创建的绑定的范围内。
答案 1 :(得分:2)
x
时, let
仍绑定在外(+ x y)
。