anchor.diff:     (%accumulation-variable :initform nil :accessor accumulation-variable)
      (%accumulation-list-tail :initform nil :accessor accumulation-list-tail)
      (%accumulation-type :initform nil :accessor accumulation-type)))
  +
  +;;; The HyperSpec defines the syntax of the loop macro like this:
  +;;;
  +;;;    loop [name-clause] {variable-clause}* {main-clause}*
  +;;;
  +;;; meaning that there is an optional name-clause followed by zero or
  +;;; more variable-clauses, followed by zero or more main clauses.  One
  +;;; might think from this that a main-clause cannot precede a
  +;;; variable-clause, but this is not true, because initially-clauses
  +;;; and finally-clauses are possibilites for both variable-clause and
  +;;; main-clause, and it is indeed possible for an initally-clause or a
  +;;; finally-clause to precede another variable-clause or to follow
  +;;; another main-clause.  
   
   (defun parse-loop-body (body)
     (multiple-value-bind (name-clause rest1)
  
positive.code: ;;;
  ;;;    variable-clause::= with-clause | initial-final | for-as-clause 
  ;;; 
  ;;; and we follow this example.  Why the HyperSpec defines it that way
  ;;; is a mystery.  
  
  (defun parse-variable-clause (body)
    (parse-alternative body
  
negative.code: (define-elementary-parser parse-for/as-in body (#:in)
    (parse-for/as-in/on (cdr body) 'for/as-in-list-subclause))
  
  (define-elementary-parser parse-for/as-on body (#:on)
    (parse-for/as-in/on (cdr body) 'for/as-on-list-subclause))
  
  (define-elementary-parser parse-for/as-equals-then body (#:=)
  