;;; env.ss (load "/u/c311/ss/if.ss") (define ; EOPL Figure 5.3.1 (class () (base ) (base-inst-vars initial-environment) (base-methods (base-parse parse)) (base-init) (inst-vars (set! (class (datum) (base ) (base-inst-vars datum) (base-init datum) (methods (define eval (method (env) datum))))) (set! (class (name) (base ) (base-inst-vars name) (base-init name) (methods (define eval (method (env) (apply env name)))))) (set! (class (rator rands) (base ) (base-inst-vars rator rands) (base-init rator rands) (methods (define eval (method (env) (apply (eval rator env) (eval rands env))))))) (set! (class (exps) (base ) (base-inst-vars exps) (base-init exps) (methods (define eval (method (env) (map (lambda (exp) (eval exp env)) exps)))))) (set! (class (test consequent alternative) (base ) (base-inst-vars test consequent alternative) (base-init test consequent alternative) (methods (define eval (method (env) (if (not (zero? (eval test env))) (eval consequent env) (eval alternative env)))))))) (methods (define name (method () 'env)) (define evaluate (method (datum) (eval (parse this datum) initial-environment))))))