2007-06-17
■ [SICP] 問題4.7 ![はてなブックマーク - [SICP] 問題4.7 - papamitraの日記 はてなブックマーク - [SICP] 問題4.7 - papamitraの日記](http://b.hatena.ne.jp/entry/image/http://sicp-study.g.hatena.ne.jp/papamitra/20070617/sicp_ex4_7)
(define (let*->nested-lets clauses)
(if (null? clauses)
'false
(let ((defs (cadr clauses))
(body (caddr clauses)))
(define (iter rest-def)
(if (null? rest-def)
body
(make-let (list (car rest-def))
(iter (cdr rest-def)))))
(iter defs))))
問題にあるlet式を展開してみると
(let ((x 3)) (let ((y (+ x 2))) (let ((z (+ x y 5))) (* x z))))
問題なく展開できている。
(eval (let*->nested-lets exp) env)を追加するだけで十分かどうかはよくわからないなぁ。
コメント