anchor.diff:      ((self-evaluating-p exp) exp)
       ((variable-p exp) (env-get env exp))
       ((quoted-p exp) (object-of-quoted exp))
  +    ((definition-p exp) (eval-definition exp env))
       (t 'not-implemented)))
   
   (defun self-evaluating-p (exp)
  
positive.code: (defun frame-vals (frame)
    (cdr frame))
  
  (defun frame-define! (frame var val)
    (rplaca frame (cons var (frame-vars frame)))
    (rplacd frame (cons val (frame-vals frame)))
    'ok)
  
  (defun frame-set! (frame var val)
    (labels ((iter (vars vals)
  	     (if (null vars)
  		 (error "undefined variable: ~a~%" var)
  		 (if (eq var (car vars))
  		     (rplaca vals val)
  		     (iter (cdr vars) (cdr vals))))))
  
negative.code: (defun object-of-quoted (exp)
    (cadr exp))
  
  (defun definition-p (exp)
    (tagged-list-p exp 'define))
  
  (defun eval-definition (exp env)
    (let ((var (cadr exp))
  	(val (eval (caddr exp))))
      (frame-define! (env-first-frame env) var val)))
  
  (defun t-print (exp)
    (print exp))
  
  (defun t-apply ())
  
  (defun repl ()
    (let ((env (env-extend (make-env) nil nil)))
     (loop
  ;;     (fresh-line)
       (format t "LISP> ")
       (t-print (t-eval (read) env))
       (fresh-line))))
  
  