anchor.diff:  ;;;; Define a cursor which sweeps , from left ro right, the values of the
   ;;;; given cursors, retunring the values as a list. 
   (defun cursor/sweep (&rest cursors)
  -  (make-instance '%sweep-2-cursor-t
  -			 :cursors cursors))
  +  (when (= 1 (length cursors))
  +    (return-from cursor/sweep (car cursors)))
  +  
  +  ;; ok, build up a chain of %sweep-2 cursors 
  +  (reduce #'(lambda (cursor sweep-2)
  +	      (make-instance '%sweep-2-cursor-t
  +			     :cursors (list cursor sweep-2)))
  +	  cursors
  +	  :from-end t))
  +      
   
   ;;=========================================================================
   
  
positive.code:     :reader cursor-pair)))
  
  (defmethod print-object ( (sweep %sweep-2-cursor-t) stream )
    (format stream "#<%SWEEP-2-CURSOR-T ~A , ~A>"
  	  (first (cursor-pair sweep))
  	  (second (cursor-pair sweep))))
  
  ;;=========================================================================
  
  
negative.code:     (error 'cursor-finished-condition
  	   :cursor sweep))
  
    ;; always call next on the first cursor
    ;; if this causes it to be done, call next on the second cursor.
    ;; if it is not done, reset first cursor to keep sweeping
    (let ((prev-value (value sweep))
  	(a (first (cursor-pair sweep)))
  	(b (second (cursor-pair sweep))))
      (next a)
      (when (done-p a)
        (next b)
        (when (not (done-p b)) 
  	(reset a)))
      (values
       prev-value
       (done-p sweep))))
  