anchor.diff:      (return-from cpf-list (slot-value context 'start)))
     (with-slots (string start end) context
       (let* ((args (cdr form))
  +           (new-context
  +             (make-context 'string-context
  +                           :gensym t
  +                           :chain context))
              (blocksym (gensym (symbol-name :and-)))
  -           (endsym (gensym (symbol-name :end-)))
  +           (endsym (slot-value new-context 'start))
              (valsym (gensym (symbol-name :val-)))
              (listsym (gensym (symbol-name :list-)))
              (tailsym (gensym (symbol-name :tail-)))
  -           (new-context
  -            (make-instance 'string-context
  -                           :string string
  -                           :start endsym
  -                           :end end))
              (inner
               `(let* ((,endsym ,start)
                       ,valsym
  
positive.code:   (with-slots (string start end) context
      (destructuring-bind (min max body) (cdr form)
        (let* ((c (gensym (symbol-name :count-)))
               (e (gensym (symbol-name :end-)))
               (le (gensym (symbol-name :last-end-)))
               (tmp (gensym (symbol-name :temp-)))
               (v (gensym (symbol-name :val-)))
               (new-context
                (make-instance 'string-context
                               :string string
                               :start e
                               :end end)))
          (values
           `(do ((,c 0)
                 (,e ,start)
  
negative.code:       (pushback `(values ,endsym (cdr ,listsym))
                  last)
        `(block ,blocksym ,inner))))
  
  
  (defrule test-and0 (and "hi" (and)))
  
  