anchor.diff:  
   
   (adt:defdata rule-tree
  -  (node t rule-tree rule-tree list)
  +  (node t rule-tree rule-tree)
     (leaf list))
   
   
  
positive.code: 
  
  (defun make-rule-tree (rules)
    (recursively ((rules (mapcar #'sort-body rules)))
      (let* ((heads (-<> rules
                      (remove-if-not #'rule-empty-p <>)
                      (mapcar #'rule-head <>)
                      (remove-duplicates <> :test #'equal)))
             (next-rules (remove-if (lambda (rule)
                                      (member (rule-head rule) heads :test #'equal))
                                    rules)))
        (if (null next-rules)
          (leaf heads)
          (multiple-value-bind (term low high both)
              (partition-rules next-rules)
            (node term
                  (recur (append (mapcar #'drop-first low) both))
                  (recur (append (mapcar #'drop-first high) both))
                  heads))))))
  
  
  ;;;; GraphViz
  
negative.code: (defparameter *rules* '(
                          (x (not b) a)
                          (x a c)
                          (y c)
                          (z d b)
                          (z (not c) d)
                          ))
  