分かったような分からんような状態だったが。
gosh> (let ((x 2) (y 3))
(let* ((x 7) (z (+ x y))) ;; z -> 10 (x 7)
(* z x)))
70
gosh> (let ((x 2) (y 3))
(let ((x 7) (z (+ x y))) ;; z -> 5 (x 2)
(* z x)))
35
let, let*, letrecを読んで理解した。
- let
- 変数1...変数nのスコープは,let式内部の式1...式mである.
- let*
- 変数iのスコープは,すぐあとの代入式(変数(i+1) 初期値(i+1))以降のlet*式の内部全てである.
ということは前者のほうも評価の順序を入れ替えてやれば、、、
gosh> (let ((x 2) (y 3))
(let* ((z (+ x y)) (x 7)) ;; ここ変えた
(* z x)))
35
なるほど。