anchor.diff:          ((null alist) (values xs ys)))))
   
   (defun scan* (function list
  -              &key key from-end (initial-value nil initial-value-p))
  +              &key key from-end (initial-value nil ivp))
     "SCAN* is similar to REDUCE, but returns a list of successive
     reduced values:
   
  
positive.code:                      ((null list) result))))
               (scan-right (list)
                 (let ((list (reverse list)))
                   (do ((list (if initial-value-p list (rest list)) (rest list))
                        (result
                         (cons (if initial-value-p initial-value (key-first list))
                               nil)
                         (cons (operate (key-first list) (first result))
                               result)))
  
negative.code:              (operate (x y)
                 (funcall function x y))
               (scan-left (list)
                 (let ((result (cons (if ivp
                                         initial-value
                                         (key-first list))
                                     nil)))
                   (do ((list (if ivp list (rest list)) (rest list))
                        (splice
                         result
                         (rest (rplacd splice (cons (operate (first splice)
  