SICP Exercise 4.8

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)     


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章