SICP Exercise 4.8
;(define (fib n)
; (let fib-iter ((a 1)
; (b 0)
; (count n))
; (if (= count 0)
; b
; (fib-iter (+ a b)
; a
; (- count 1)))))
;(define (fib n)
; (define (fib-iter a b count)
; (if (= count 0)
; b
; (fib-iter (+ a b) a (- count 1))))
; (fib-iter 1 0 n))
(define (let->define exp)
(let ((name (cadr exp))
(bindings (caddr exp))
(body (cdddr exp)))
(sequence->exp
(list (make-define name
(map car bindings) ;vars
body)
(cons name
(map cadr bindings)))))) ;vals
(define (make-define name paras body)
(cons 'define
(cons (cons name paras)
body)))
(define (eval-let exp env)
(if (pair? (cadr exp))
(eval (let->lambda exp) env)
(eval (let->define exp) env)))
(put 'let eval-let)