(define (eval exp env)
(cond ((self-evaluating? exp) exp)
((variable? exp) (lookup-variable-value exp env))
((get 'eval (car exp))
((get 'eval (car exp)) exp env))
((application? exp)
(apply (eval (operator exp) env)
(list-of-values (operands exp) env)))
(else
(error "Unknown expression type -- EVAL" env))))
(define (install)
(put 'eval 'quote (lambda (exp) ... ))
(put 'eval 'set! (lambda (exp) ...))
(put 'eval 'define (lambda (exp) ...))
(put 'eval 'if (lambda (exp) ...))
(put 'eval 'lambda (lambda (exp) ...))
(put 'eval 'begin (lambda (exp) ...))
(put 'eval 'cond (lambda (exp) ...)))
(install)