Mercurial > emacs
diff lisp/subr.el @ 54016:15b3e94eebd4
(delete-dups): A better implementation from Karl Heuer <kwzh@gnu.org>.
author | Eli Zaretskii <eliz@is.elta.co.il> |
---|---|
date | Mon, 16 Feb 2004 19:40:07 +0000 |
parents | 342806d7b32b |
children | cf58c77ee000 |
line wrap: on
line diff
--- a/lisp/subr.el Mon Feb 16 19:35:20 2004 +0000 +++ b/lisp/subr.el Mon Feb 16 19:40:07 2004 +0000 @@ -210,18 +210,14 @@ x)))) (defun delete-dups (list) - "Destructively return LIST, with `equal' duplicates removed. -LIST must be a proper list. The value of LIST after a call to -this function is undefined. Use \(setq LIST (delete-dups LIST)) -if you want to store the return value in LIST. Of several -`equal' occurrences of an element in LIST, the last one is kept." - (while (member (car list) (cdr list)) - (pop list)) + "Destructively remove `equal' duplicates from LIST. +Store the result in LIST and return it. LIST must be a proper list. +Of several `equal' occurrences of an element in LIST, the first +one is kept." (let ((tail list)) (while tail - (while (member (cadr tail) (cddr tail)) - (setcdr tail (cddr tail))) - (pop tail))) + (setcdr tail (delete (car tail) (cdr tail))) + (setq tail (cdr tail)))) list) (defun number-sequence (from &optional to inc)