diff --git a/code/list.lisp b/code/list.lisp index 032da6a902c5eba57b14c7b03310b04a2d20f97f..56d17d0b4da45a132525c1922798d5f9a2bb77a5 100644 --- a/code/list.lisp +++ b/code/list.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/list.lisp,v 1.7 1991/02/25 23:58:42 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/list.lisp,v 1.8 1991/11/05 14:18:20 ram Exp $") ;;; ;;; ********************************************************************** ;;; @@ -174,10 +174,12 @@ (cdr list)) (defun nthcdr (n list) + (declare (type index n)) "Performs the cdr function n times on a list." (do ((i n (1- i)) (result list (cdr result))) - ((not (plusp i)) result))) + ((not (plusp i)) result) + (declare (type index i)))) (defun last (list &optional (n 1)) "Returns the last N conses (not the last element!) of a list." @@ -352,32 +354,32 @@ (defun butlast (list &optional (n 1)) "Returns a new list the same as List without the N last elements." - (declare (list list) (type integer n)) - (if (< n 0) (setq n 0)) + (declare (list list) (type index n)) (let ((length (1- (length list)))) - (declare (fixnum length)) + (declare (type index length)) (if (< length n) - () - (do* ((top (cdr list) (cdr top)) - (result (list (car list))) - (splice result) - (count length (1- count))) - ((= count n) result) - (setq splice (cdr (rplacd splice (list (car top))))))))) + () + (do* ((top (cdr list) (cdr top)) + (result (list (car list))) + (splice result) + (count length (1- count))) + ((= count n) result) + (declare (type index count)) + (setq splice (cdr (rplacd splice (list (car top))))))))) (defun nbutlast (list &optional (n 1)) "Modifies List to remove the last N elements." - (declare (list list) (type integer n)) - (if (< n 0) (setq n 0)) + (declare (list list) (type index n)) (let ((length (1- (length list)))) - (declare (fixnum length)) + (declare (type index length)) (if (< length n) () - (do ((1st (cdr list) (cdr 1st)) - (2nd list 1st) - (count length (1- count))) - ((= count n) - (rplacd 2nd ()) - list))))) + (do ((1st (cdr list) (cdr 1st)) + (2nd list 1st) + (count length (1- count))) + ((= count n) + (rplacd 2nd ()) + list) + (declare (type index count)))))) (defun ldiff (list sublist) "Returns a new list, whose elements are those of List that appear before