From: Eli Zaretskii Date: Mon, 16 Feb 2004 19:40:07 +0000 (+0000) Subject: (delete-dups): A better implementation from Karl Heuer . X-Git-Tag: ttn-vms-21-2-B4~7577 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1f3e4f92e703f950db290c62020db7d2158a09ff;p=emacs.git (delete-dups): A better implementation from Karl Heuer . --- diff --git a/lisp/subr.el b/lisp/subr.el index 641d81a6fb6..0b3c3df4e8d 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -210,18 +210,14 @@ If N is bigger than the length of X, return X." 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)