SICP Practice

Practice 4.3

	(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)