anchor.diff:            (prevar var expr state)
             (prebind bindings expr state)))))
   
  -(defun accumulate (kind term var state)
  +(defun accumulate (kind item var state)
     (when (null var)
       (when (and (default-accum-kind state) (not (eq kind (default-accum-kind state))))
         (error "PS-LOOP encountered illegal ~a: ~a was already declared, and there can only be one kind of default accumulation per loop." kind (default-accum-kind state)))
  
positive.code:     '(:named :for :repeat :with :while :until :initially :finally
        :from :to :below :downto :above :by :in :across :on := :then
        :when :unless :if :else :end :do :return
        :sum :collect :append :count :minimize :maximize :into))
  
    (defun as-keyword (key)
      (intern (symbol-name key) :keyword)))
  
negative.code:                     (progn ,@(reverse alts))))))
          ((:sum :collect :append :count :minimize :maximize)
           (accumulate term (eat state) (eat state :if :into) state))
          (:map (let ((key (eat state)))
                  (multiple-value-bind (val valp)
                      (eat state :if :to)
                    (unless valp
                      (error "MAP must be followed by a TO to specify value."))
                    (accumulate :map (list key val) (eat state :if :into) state))))
          (:do (eat state :progn))
          (:return `(return-from ,(name state) ,(eat state)))
          (otherwise (err "a PS-LOOP keyword" term))))
  