Hatena::Groupsicp-study

papamitraの日記

2007-06-17

[SICP] 問題4.7 はてなブックマーク -  [SICP] 問題4.7 - papamitraの日記

(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)を追加するだけで十分かどうかはよくわからないなぁ。