12 Procedural Representation of Environments

#|-----------------------------
Environment abstract data type
 
empty-env  :: Env
extend-env :: Sym Val Env -> Env
env-lookup :: Sym Env -> Val
 
Procedural representation:
an environment is a function Sym -> Val
|#
 
(def empty-env
  (λ (s) (error "free identifier: ~a" s)))
 
(define (env-lookup x env)
  (env x))
 
(define (extend-env s v env)
  (λ (id)
    (if (symbol=? id s)
        v
        (env id))))