anchor.diff:  in the first list are taken from the head of LIST while PREDICATE is
   satisfied, and elements in the second list are the remaining elements
   from LIST once PREDICATE is not satisfied."
  -  (when (and (functionp predicate) (consp list))
  +  (when (and (functionp predicate) (listp list))
       (let ((result (cons nil nil)))
         (do ((list list (rest list))
              (splice result (rest (rplacd splice (cons (first list) nil)))))
  
positive.code: (defun drop-while (predicate list)
    "Applied to PREDICATE and LIST, removes elements from the front of
  LIST while PREDICATE is satisfied."
    (when (and (functionp predicate) (consp list))
      (do ((list list (rest list)))
          ((or (null list)
               (not (funcall predicate (first list)))) list))))
  
negative.code: (defun take-while (predicate list)
    "Applied to PREDICATE and LIST, returns a list containing elements
  from the front of LIST while PREDICATE is satisfied."
    (when (and (functionp predicate) (listp list))
      (let ((result (cons nil nil)))
        (do ((list list (rest list))
             (splice result (rest (rplacd splice
  