SICP Practice

Practice 4.13

只unbound当前frame中的绑定比较合适

(define (make-unbound! var env)
	(let ((frame (first-frame env)))
		(delete var frame)))

(define (delete var frame)
	(let ((new-vars '())
		    (new-vals '())
		    (vars (car frame))
		    (vals (cdr frame)))

		(define (temp vars vals)
			(if (null? vars)
				  (begin (set-car! frame new-vars)
				         (set-cdr! frame new-vals)
				         'ok)
				  (if (eq? var (car vars))
              (temp (cdr vars) (cdr vals))
					    (begin (set! new-vars (append new-vars (list (car vars))))
						         (set! new-vals (append new-vals (list (car vals))))
							       (temp (cdr vars) (cdr vals))
						         'ok))))
		(temp vars vals)))