anchor.diff:  ;;; Evaluator
   ;;;
   
  -(defun eprogn (exps env fenv)
  -  (when exps
  -    (if (cdr exps)
  -        (progn (evaluate (car exps) env fenv)
  -               (eprogn (cdr exps) env fenv))
  -        (evaluate (car exps) env fenv))))
  +(defun eval-do (forms env fenv)
  +  "`Evaluate' each of FORMS in the environments ENV and FENV"
  +  (dolist (form forms)
  +    (evaluate form env fenv)))
   
   (defun eval-list (list env fenv)
     (mapcar (lambda (exp) (evaluate exp env fenv)) list))
  
positive.code:         (|function| (if (symbolp (cadr exp))
                          (lookup (cadr exp) fenv)
                          (error "No such function: ~A" (cadr exp))))
          (|flet| (eprogn (cddr exp) env (extend fenv (mapcar #'car (cadr exp))
                                                 (mapcar (lambda (def)
                                                           (make-function (cadr def)
                                                                          (cddr def)
                                                                          env fenv))
                                                         (cadr exp)))))
            (otherwise (evaluate-application (car exp)
                                           (eval-list (cdr exp) env fenv)
                                           fenv)))))
  
  
negative.code: 
  (defun make-function (variables body env fenv)
    (lambda (values)
      (eval-do body (extend env variables values) fenv)))
  
  (defun evaluate-application (fn args fenv)
    (assert (symbolp fn))
  