リストから重複した要素を取り除く - lisp-cookbook-ja/common-lisp GitHub Wiki

リスト

remove-duplicatesdelete-duplicates を使います。delete-duplicates は引数として与えられたリストの内容を処理系が返り値を効率よく作成するために破壊しても構わないことになっています。 また、値をテストするための関数を :test キーワードにて与えることができます。(デフォルトでは eql) 返り値のリストは、基本では、前に出現した重複分が消去されますので、前のものを優先したい場合は、:from-end に非nil値を与えます。

(remove-duplicates '("abc" "cba" "abc") :test #'equal) 
;=> ("cba" "abc")

(remove-duplicates '("abc" "cba" "abc") :test #'equal :from-end T) 
;=> ("abc" "cba")

(let ((list (copy-list '(a b c a a b a c))))
  (list (delete-duplicates list)
        list))
;=> ((B A C) (A B C A A B A C))