SICP 問題 4.13
(define (scan var vars vals proc) (cond ((null? vars) #f) ((eq? var (car vars)) (proc var vars vals)) (else (scan var (cdr vars) (cdr vals) proc)))) ;; 束縛された変数を解放するmake-unbound! ;; first-frameだけでに限定しないと (define (make-unbound! var env) (let ((frame (first-frame env))) (let ((target (scan var (frame-variables frame) (frame-values frame) (lambda (var vars vals) (set! vars (cdr vars)) (set! vals (cdr vals)) 'ok)))) (if target target (error "Unbound variable" var)))))