anchor.diff:    (if (null body)
         (error 'expected-form-but-end)
         (values (car body) (cdr body))))
  -
  -;;; Return two values, the first clause of the body, and the remaining
  -;;; body to be parsed.  The body does not include the loop keyword
  -;;; which must have been removed before this function is called.
  -
  -(defgeneric parse-body (body keyword))
   
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;
  
positive.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 (#:n)
    (parse-for/as-in/on (cdr body) 'for/as-on-list-subclause))
  
  (define-elementary-parser parse-for/as-equals-then body (#:=)
  
negative.code:    (%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)
  