anchor.diff:  ;;; modify) is performed elsewhere as these constructs undergo additional
   ;;; transformations.
   ;;;
  -;;; $Id: parser.lisp,v 1.9 2002/08/26 01:36:25 youngde Exp $
  +;;; $Id: parser.lisp,v 1.10 2002/08/26 16:03:48 youngde Exp $
   
   (in-package "LISA")
   
  
positive.code:     (cl:assert (and (listp form)
                      (= (length form) 1)) nil
        "The body of a TEST CE must be a single Lisp form")
      (values
       (loop for obj in (utils:flatten form)
           if (variablep obj)
           collect (cons obj (find-or-set-binding-address obj location)))
       pattern)))
  
  (defun parse-default-pattern (pattern location)
    (let ((head (first pattern)))
      (cl:assert (find-meta-fact head nil) nil
        "This pattern has no meta data: ~S" pattern)
      (labels ((parse-slot (slot)
                 (let ((name (first slot))
                       (field (second slot))
                       (constraint (third slot))
  
negative.code:       "There's no slot binding for variable ~S" var)
      binding))
  
  (defun collect-bindings (forms)
    (loop for obj in (utils:flatten forms)
        if (variablep obj)
        collect (find-slot-binding obj)))
  
  (defmacro with-rule-components (((doc-string lhs rhs) rule-form) &body body)
    (let ((remains (gensym)))
  