Deutsch   English   Français   Italiano  
<v53k98$349qd$1@jmertens.eternal-september.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!feed.opticnetworks.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!jmertens.eternal-september.org!.POSTED!not-for-mail
From: Joerg Mertens <joerg-mertens@t-online.de>
Newsgroups: comp.lang.lisp
Subject: Re: Faster remove-duplicates with sorted list.
Date: Fri, 21 Jun 2024 12:22:31 +0200
Organization: A noiseless patient Spider
Lines: 51
Message-ID: <v53k98$349qd$1@jmertens.eternal-september.org>
References: <v4usrm$21fur$1@dont-email.me> <v4v93u$23sti$1@dont-email.me>
Injection-Date: Fri, 21 Jun 2024 12:22:34 +0200 (CEST)
Injection-Info: jmertens.eternal-september.org; posting-host="7ae42e8280091382f0aff5976b7e5038";
	logging-data="3286872"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19sTVA/U0RlDcrm654E8EiRtXc8CIyQ1kc="
User-Agent: tin/2.6.2-20221225 ("Pittyvaich") (OpenBSD/7.5 (amd64)) tinews.pl/1.1.61
Cancel-Lock: sha1:pYsg3WynJkHQnkXgNhjmEzV3koc=
Bytes: 2701

B. Pym <No_spamming@nowhere_7073.org> wrote:
> "Pierre R. Mai" wrote:
> 
>> (defun uniquify-sorted-list (list &key (key #'identity) (test #'eql))
>>   (loop for element in list
>>         for element-key = (funcall key element)
>>         for last-element-key = (load-time-value (gensym))
>>         then element-key
>>         unless (funcall test element-key last-element-key)
>>         collect element))
> 
> Testing under SBCL:
> 
> (defun uniquify-sorted-list (list &key (key #'identity) (test #'eql))
>   (loop for element in list
>         for element-key = (funcall key element)
>         for last-element-key = (load-time-value (gensym))
>         then element-key
>         unless (funcall test element-key last-element-key)
>         collect element))
> 
> (uniquify-sorted-list '(a b b c d d e f f f g))
>   ===>
> (A)
> 
> (uniquify-sorted-list '(2 2 3 4 4 4 5 5 6 7))
>   ===>
> (2)
> 
> (uniquify-sorted-list '(2 2 3 4 4 4 5 5 6 7) :test #'=)
>   ===>
> debugger invoked on a SIMPLE-TYPE-ERROR in thread
> #<THREAD "main thread" RUNNING {23EAC0D1}>:
>   Argument Y is not a NUMBER: #:G5

(defun uniquify-sorted-list (list &key (key #'identity) (test #'eql))
  (loop for element in list
        for last-element-key = nil then element-key
        for element-key = (funcall key element)
        for result = nil then (funcall test element-key last-element-key)
        unless result collect element))

Tested with GNU Clisp:

[3]> (uniquify-sorted-list '(a b b c d d e f f f g))
(A B C D E F G)
[4]> (uniquify-sorted-list '(2 2 3 4 4 4 5 5 6 7))
(2 3 4 5 6 7)
[5]> (uniquify-sorted-list '(2 2 3 4 4 4 5 5 6 7) :test #'=)
(2 3 4 5 6 7)