;;; assign.ss (load "/u/c311/ss/proc.ss") (define ; EOPL Figure 5.5.1 (class () (base ) (base-inst-vars initial-environment empty-environment test-clauses) (base-methods (base-parse parse)) (base-init) (inst-vars (define (class (name exp) (base ) (inst-vars name exp) (methods (define eval (method (env) (store (apply env name) (eval exp env)))) (define unparse (method () (list 'assign name (unparse exp))))))) (set! (class (name) (base ) (base-inst-vars name) (base-init name) (methods (define eval (method (env) (fetch (apply env name))))))) (set! (class (env names values) (base ) (base-inst-vars values-vector) (base-init env names values) (inst-vars (set! values-vector (list->vector (map (vector->list values-vector))))))) (set! initial-environment ( empty-environment (domain initial-environment) (map (lambda (name) (apply initial-environment name)) (domain initial-environment)))) (set! test-clauses (append '(((let ((x 3)) ((proc (y) x) (assign x 4))) 4)) test-clauses))) (methods (define name (method () 'assign)) (define parse (method (datum) (form-case datum (assign (name exp) ( name (parse this exp))) (else (base-parse this datum))))))))