SICP Exercise 4.6

SICP Exercise 4.6

;(let ((var1 val1) (var2 val2) ...) body)
(define (let->lambda exp)
  (let ((vars (let-vars exp))
        (vals (let-vals exp))
        (body (let-body exp)))
    (cons (make-lambda vars body)
          vals)))

(define (let-vars exp)
  (let ((pairs (cadr exp)))
    (map car pairs)))

(define (let-vals exp)
  (let ((pairs (cadr exp)))
    (map cadr pairs)))

(define (let-body exp)
  (cddr exp))

(define (eval-let exp env)
  (eval (let->lambda exp) env))

(put 'let eval-let)
運行測試:

;;; M-Eval input:
(let ((a 1) (b 2)) (+ a b))

;;; M-Eval value:
3



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