環境

id:Uuutokuda:20060205:1139129190
pla氏がcall/ccでキモく書いていたのでつい釣られクマーたが、
普通に書いたらなんかpla氏のコードとほぼ同じに見えたので
もう一個書いてみたらやっぱり大して変わんない気がした。

(define (set-value! var val env)

  (define (search env)
    (and (pair? env)
         (or (assq var (car env))
             (search (cdr env)))))

  (if (not (pair? env))
      (error "更新できませんがな" env))

  (let ((found (search env)))
    (if found
        (set-car! (cdr found) val)
        (set-car! env (cons (list var val) (car env))))))
(define (set-value! var val env)
  (call-with-current-continuation
   (lambda (return)

     (if (not (pair? env))
         (error "更新できませんがな" env))

     (for-each
      (lambda (frame)
        (let ((found (assq var frame)))
          (when found
                (set-car! (cdr found) val)
                (return))))
      env)

     (set-car! env (cons (list var val) (car env))))))