anchor.diff:  ;;;; * Walkers
   
   (deflisp1-walker form ()
  +  ;; By default all forms will stay the same.
     form)
   
   (deflisp1-walker if-form (consequent then else)
  +  ;; Transform the test and branches recursively.
     (new 'if-form
          :consequent (lisp1 consequent)
          :then       (lisp1 then)
          :else       (lisp1 else)))
   
   (deflisp1-walker lambda-function-form (arguments body)
  +  ;; For any function-form (ie lambda), we just transform the body.
  +  ;; We also must add the parameters to the list of bound variables.
     (let1 *bound-vars*
         (append (mapcar #'name arguments) *bound-vars*)
       (new 'lambda-function-form
  
positive.code: 	 :body      (lisp1s body))))
  
  (deflisp1-walker free-variable-reference (name)
    (if (and (fboundp name) (not (member name *bound-vars*)))
        (change-class form 'free-function-object-form)
        form))
  
  (deflisp1-walker application-form (operator arguments)
    (new 'free-application-form
         :operator  'funcall
         :arguments (cons (if (not (typep operator 'form))
  
negative.code: ;;;; * Utils
  
  (defun lisp1s (forms)
    "Convert a list of forms to Lisp-1 style."
    (mapcar #'lisp1 forms))
  
  (defun lisp1b (binds)
    "Convert an alist of (VAR . FORM) to Lisp-1 style."
    (mapcar (lambda (bind)
  	    (cons (car bind)
  		  (lisp1 (cdr bind))))
  