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

© 2022 wat-aro