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))))