SICP 読み (144) 4.1.2 式の表現

バスで帰宅中に問題 4.6 をざくっと見た。

問題 4.6

例示されているソレで言うと

(let* ((x 3)
       (y (+ x 2))
       (z (+ x y 5)))
  (* x z))

(let ((x 3))
  (let ((y (+ x 2)))
    (let ((z (+ x y 5)))
      (* x z))))

になれば良いんだろうな、と。nested な let を作った後にいっちゃんケツのナニをくっつければ OK ってーのは easy に過ぎるでしょうか。

gosh> (define l '(let ((x 3) (y (+ x 2)) (z (+ x y 5))) (* x y)))
l
gosh> (cadr l)
((x 3) (y (+ x 2)) (z (+ x y 5)))
gosh> (cddr l)
((* x y))
gosh> 

これも前の問題と同じく、でき上がった let の並びに (cddr l) を append すれば良さげだな。あと、ぱっと見で

(eval (let*->nested-let exp) env)

はダウト臭い。4.6 な解をビンゴとしたら

(eval (let->combination (let*->nested-let exp)) env)

ではないかな、っぽいメモをバスの中で書いている。他のコトをヤッてる内に日付が変わったのでそのままエントリ投入。