anchor.diff:  ;;; This implementation works according to the HyperSpec note
   ;;; when n is 0.
   
  -;;; FIXME: The HyperSpec says that we must signal a type-error
  -;;; for circular lists, but we currently don't. 
  -
   (defun butlast (list &optional (n 1))
     (unless (typep list 'list)
       (error 'must-be-list
  
positive.code: 	   :name 'nbutlast))
    (if (= n 1)
        (nbutlast-1 list)
        (let ((length (loop for conses = list then (cdr conses)
                            until (atom conses)
                            count t)))
          (if (<= length n)
              nil
              (progn (setf (cdr (nthcdr (- length (1+ n)) list)) nil)
  
negative.code: ;;; This condition is used by functions and macros that require
  ;;; some list to be either a proper list or a circular list.
  (define-condition must-be-proper-or-circular-list (type-error name-mixin)
    ()
    (:default-initargs :expected-type 'list))
  
  ;;; This condition is used by functions and macros that require some
  ;;; list to be either a proper list or a dotted list (but not a
  ;;; circular list). 
  (define-condition must-be-proper-or-dotted-list (type-error name-mixin)
    ()
    (:default-initargs :expected-type 'list))
  
  