t3x.org / sketchy / library / unique.html
SketchyLISP
Reference
  Copyright (C) 2007
Nils M Holm

unique

Conformance: SketchyLISP Extension

Purpose: Transform a list into a set. A set is a list containing only unique elements.

Arguments:
A - list

Model:

(define unique (lambda (a)
  (cond ((null? a) a)
    ((member (car a) (cdr a)) (unique (cdr a)))
    (else (cons (car a) (unique (cdr a)))))))

Implementation:

(define (unique a)
  (letrec
    ((_unique
       (lambda (a r)
         (cond ((null? a)
             (reverse r))
           ((member (car a) r)
             (_unique (cdr a) r))
           (else (_unique (cdr a)
                   (cons (car a) r)))))))
    (_unique a '())))

Example:

(unique '(a b b c d a)) 
=> (a b c d)

See also:
intersection, union, member.