changeset 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 beb6050d0147
children 78e8edcefe98
files lisp/subr.el
diffstat 1 files changed, 6 insertions(+), 10 deletions(-) [+]
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)