(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之間的混淆。谷歌。我已經谷歌,但不能得到它。方案混淆放開和讓·
(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之間的混淆。谷歌。我已經谷歌,但不能得到它。方案混淆放開和讓·
x
在呼叫(+ x y)
時仍然綁定到外部let
。
要擴大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*
窗體中的每個連續綁定之後,第一個位於所有先前創建的綁定的範圍內。