anchor.diff:         (flet (,@(loop for p in productions collect
                       (destructuring-bind ((name &rest args) &rest body) p
                         `(,name (,@args text state position)
  -                              ,(compile-progn body 'text 'state 'position names)))))
  +                              ,(compile-progn body 'text 'state 'position names (gensym "R"))))))
            (,(first names)
              text
              (list ,@(mapcar #'(lambda (x) `(cons ',x ,x)) args))
  
positive.code:       (compile-wrapped-form
         #'progn-wrapper
         (first body)
         txt st pos s p names
         (compile-progn (rest body) txt s p names)))))
  
  (defun progn-wrapper (expr ok result s p continuation failure)
    `(multiple-value-bind (,ok ,result ,s ,p) ,expr
  
negative.code:                               (if ok
                                    (values t res s pos)
                                    (values nil nil state pos)))
                              (values nil nil state pos)))
                        (values nil nil state pos))))
                text state position))
  
  