練習問題4.22
(define (analyze-let exp)
(analyze (let->combination exp)))
(define (let->combination exp)
(let ((defs (let-defs exp)))
((make-lambda (let-variable-from-defs defs) (let-body exp))
(let-defbody-from-defs defs))))
(define (let-defs exp)
(cadr exp))
(define (let-body exp)
(caddr exp))
(define (let-variable-from-defs defs)
(if (null? defs)
'()
(cons (caar defs) (let-variable-from-defs (cdr defs)))))
(define (let-defbody-from-defs defs)
(if (null? defs)
'()
(cons (cdar defs) (let-variable-from-defs (cdr defs)))))