2015/12/22
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)))))