SICP問題4.11

各束縛が名前-値の対であるような束縛のリストで表現されたフレーム

(define (make-frame variables values)
  (define (iter rest-variables rest-values)
    (if (null? rest-variables) 
        '()
        (cons (cons (car rest-variables) (car rest-values))
              (iter (cdr rest-variables) (cdr rest-values)))))
  (iter variables values))
(define (frame-variables frame)
  (map car frame))
(define (frame-values frame)
  (map cdr frame))
(define (add-binding-to-frame! var val frame)
  (set-cdr! frame (append (cdr frame) (list (cons var val)))))
(define (extend-environment vars vals base-env)
  (if (= (length vars) (length vals))
      (list (make-frame vars vals) base-env)
      (if (< (length vars) (length vals))
          (error "Too many arguments supplied" vars vals)
          (error "Too few arguments supplied" vars vals))))