配列から重複した要素を取り除く - lisp-cookbook-ja/common-lisp GitHub Wiki
配列から重複した要素を取り除く
remove-duplicates や delete-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 ((a (copy-seq #(a b c a a b a c))))
(list (delete-duplicates a)
a))
;=> (#(B A C) #(A B C A A B A C))