anchor.diff:    INCF-CL> (scan* #'+ (list 1 2 3 4) :from-end t)
     (10 9 7 4)"
     (when (and (functionp function)
  -             (if initial-value-p (listp list) (consp list)))
  +             (if ivp (listp list) (consp list)))
       (labels ((key-first (list)
                  (if key
                      (funcall key (first list))
  
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:         ((null alist) (values xs ys)))))
  
  (defun scan* (function list
                &key key from-end (initial-value nil ivp))
    "SCAN* is similar to REDUCE, but returns a list of successive
    reduced values:
  
  