Set

interseção de listas

Quais elementos estão tanto em list-a quanto em list-b ?

(defparameter list-a '(0 1 2 3))
(defparameter list-b '(0 2 4))
(intersection list-a list-b)
;; => (2 0)

Remover os elementos de list-b de uma list-a

set-difference

(set-difference list-a list-b)
;; => (3 1)
(set-difference list-b list-a)
;; => (4)

Juntar duas listas

union

(union list-a list-b)
;; => (3 1 0 2 4) ;; a ordem pode ser diferente no seu Lisp

Remover elementos que estão em ambas as listas

set-exclusive-or

(set-exclusive-or list-a list-b)
;; => (4 3 1)

e sua forma "reciclável" (nintersection,...).

Veja também as funções setp, set-equal,... em Alexandria.