npt-japanese

% Function REMOVE-DUPLICATES, DELETE-DUPLICATES

UP


Function REMOVE-DUPLICATES, DELETE-DUPLICATES

Function REMOVE-DUPLICATES, DELETE-DUPLICATES

構文

remove-duplicates sequence &key from-end test test-not start end key
=> result-sequence

delete-duplicates sequence &key from-end test test-not start end key
=> result-sequence

引数と戻り値

sequence - 正常なシーケンス
from-end - generalized-boolean、デフォルトはfalse
test - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
test-not - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
start, end - sequenceの境界インデックス指定子。 デフォルトはstart, endそれぞれ0nil
key - 1つの引数を取る関数の指定子、またはnil
result-sequence - シーケンス

定義

remove-duplicatesは、 他の要素とマッチするような要素を削除した sequenceのコピーを返却します。

もしsequencevectorのとき、返却値はvectorであり、 sequenceと同じ実際の配列の要素の型を持ちます。 もしsequenceがリストなら、返却値はリストです。

sequenceの要素は対で比較され、 どれか2つが一致すれば、先に発生したものが捨てられます。 ただし,from-endtrueの場合は、 後に発生したものが捨てられます。

remove-duplicatesdelete-duplicatesは、 sequenceと同じ型のシーケンスに、 残りのどの2つの要素にもマッチしないように、 十分に要素取り除いた内容のものを返却します。 返却値に残った要素の順序は、sequenceに現れるものと同じです。

remove-duplicatesの返却値は、sequenceを共有するかもしれません。 もし要素に削除が生じなかったときは、 入力のsequenceと同一のものが返却される可能性があります。

delete-duplicatesは、sequenceがリストのときは、 sequenceのトップレベルのリスト構造の どのcar, cdrでもsetfすることが許されています。 もしsequencevectorのときは、 delete-duplicatesvectorの次元を変更し、 その要素を並べ替えをせず、新しい位置にスライドして 返却値のvectorを構築することが許されています。

例文

(remove-duplicates "aBcDAbCd" :test #'char-equal :from-end t) =>  "aBcD"
(remove-duplicates '(a b c b d d e)) =>  (A C B D E)
(remove-duplicates '(a b c b d d e) :from-end t) =>  (A B C D E)
(remove-duplicates '((foo #\a) (bar #\%) (baz #\A))
    :test #'char-equal :key #'cadr) =>  ((BAR #\%) (BAZ #\A))
(remove-duplicates '((foo #\a) (bar #\%) (baz #\A)) 
    :test #'char-equal :key #'cadr :from-end t) =>  ((FOO #\a) (BAR #\%))
(setq tester (list 0 1 2 3 4 5 6))
(delete-duplicates tester :key #'oddp :start 1 :end 6) =>  (0 4 5 6)

副作用

delete-duplicatesは、sequenceを破壊的に修正するかもしれません。

影響

なし。

例外

sequenceが正常なシーケンスでないとき、 型type-errorのエラーが発生します。

参考

3.2.1. コンパイラーの用語, 3.6. 横断の規則と副作用

備考

もしsequencevectorなら、 返却値はsimpleかもしれませんし、そうでないかもしれません。 また、返却値はsequenceと同一かもしれませんし、 そうでないかもしれません。

:test-notパラメーターは非推奨です。

これらの関数は、sequenceを集合で表現される 標準形に変換するのに便利です。


TOP, Github