anchor.diff:         (or "c" "d")))
   
   (defmethod cpf-list ((car (eql 'optional)) form context env)
  +  (declare (ignore car))
     (cpf (cons 'repeat (cons 0 (cons 1 (cdr form)))) context env))
   
   (defmethod cpf-list ((car (eql 'repeat)) form context env)
     "(repeat min max form) where min is 0 or more and max is an integer or nil for unlimited"
  +  (declare (ignore car))
     (with-slots (string start end) context
       (destructuring-bind (min max body) (cdr form)
         (let* ((c (gensym (symbol-name :count-)))
  
positive.code: 
  ;; new flat method (less nesting is easier to read?)
  (defmethod cpf-list ((car (eql 'and)) form context env)
    (unless (cdr form) ; style tweak, doesn't change runtime, mimics (cl:and)
      (return-from cpf-list (slot-value context 'start)))
    (with-slots (string start end) context
  
negative.code: 
  (defmethod cpf-list ((car (eql 'exception)) form context env)
    "(exception A B) -> match if A matches but B does not"
    (declare (ignore car))
    (assert (= (length form) 3))
    (with-slots (string start end) context
      (destructuring-bind (pass fail) (cdr form)
  