• Faster remove-duplicates with sorted list.

    From Robert L.@21:1/5 to All on Fri Feb 11 16:55:32 2022
    (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))

    Gauche Scheme:

    (define (destutter seq :optional (test equal?) (key values))
    (if (or (null? seq) (null? (cdr seq)))
    seq
    (let ((ab (take seq 2)))
    (if (apply test (map key ab))
    (destutter (cdr seq) test key)
    (cons (car ab) (destutter (cdr seq) test key))))))

    (destutter '(0 0 1 2 3 3 3 4 5))
    ===>
    (0 1 2 3 4 5)

    (destutter '(0 0 2 3 5 7 6 8) eq? odd?)
    ===>
    (2 7 8)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)