program. Scheme 环境查找、扩展与 define 的实现[mce-env]
Defines: (extend-environment lookup define-value!)
Assembled in Scheme 解释器的装配计划, Scheme环境模块
Outputs: metacircular.scm, lp-example/mce/environment.scm
(define (extend-environment names values outer)
(unless (= (length names) (length values)) (throw 'mce-arity names values))
(cons (vector (map cons names values)) outer))
(define (lookup name environment)
(if (null? environment) (throw 'mce-unbound name)
(let ((binding (assq name (vector-ref (car environment) 0))))
(if binding (cdr binding) (lookup name (cdr environment))))))
(define (define-value! name value environment)
(let* ((frame (car environment)) (binding (assq name (vector-ref frame 0))))
(if binding (set-cdr! binding value)
(vector-set! frame 0 (cons (cons name value) (vector-ref frame 0))))))