anchor.diff:  Setf of `slice' is like setf of `ldb': afterwards, the place being set
   holds a new sequence which is not EQ to the old."
     (multiple-value-bind (start end)
  -      (slice-bounds seq start end)
  +      (slice-bounds (length seq) start end)
       (subseq seq start end)))
   
   (defun setslice (seq1 seq2 start &optional end)
     "Helper to `set' a slice non-destructively."
     (multiple-value-bind (start end)
  -      (slice-bounds seq1 start end)
  +      (slice-bounds (length seq1) start end)
       (replace (copy-seq seq1) seq2 :start1 start :end1 end)))
   
   (define-setf-expander slice (sequence start &optional end
  
positive.code: 
  (deftype test-designator ()
    '(or null function-name function))
  
  (-> canonicalize-key (key-designator) function)
  (defun canonicalize-key (k)
  
negative.code:             (if (eql (longer x y) x) y x))
            seqs))
  
  (defsubst slice-bounds (len start end)
    "Normalize START and END, which may be negative, to offsets
  acceptable to SUBSEQ."
    (declare (type signed-array-index start end)
             (type array-index len))
    (values (if (minusp start)
                (+ len start)
                start)
            (if (null end)
                nil
                (if (minusp end)
                    (+ len end)
                    end))))
  
  (defun slice (seq start &optional (end (length seq)))
  