Next: , Previous: , Up: リスト   [Contents][Index]


10.3 集合としてのリスト

これらの関数は、要素の集合を表現するリストに作用する。

Function: member item list

このMacLisp互換の関数は、itemequalである要素を見つける ためにlistを検索する。member関数はEmacs 19へ組み込まれて いる; このパッケージは、Emacs 18に同等にそれを定義する。Common Lisp互 換版の下記の関数を参照せよ。

Function: member* item list &key :test :test-not :key

この関数は、itemとマッチする要素を見つけるためにlistを 検索する。マッチが見つかった場合、そのcarがマッチする要素である コンスセルを戻す。さもなければnilを戻す。要素は、既定では eqlで比較される; この振る舞いを修正するために、:test:test-not:key引数を使ってもよい。See .

この関数の名前は、Emacs 19に定義されている非互換なmember関数を 避けるために、‘*’で接尾辞づけられていることに注意せよ(その関数は 比較にequalを使う; それは (member* item list :test 'equal)と同等である)。

member-ifmember-if-not関数は同様に、与えられた述語を 満たす要素を検索する。

Function: tailp sublist list

この関数は、sublistlistの副リスト、すなわちsublistlistまたはそのcdrのいずれかとeqlである場合に、 tを戻す。

Function: adjoin item list &key :test :test-not :key

この関数は、itemがそのリストにまだ存在しない場合(member* によって決定される)にだけ、(cons item list)のように、 listの先頭にitemをコンスする。:key引数が指定された 場合、itemがリストの一部に“なろうとしている”のを推理するために、 検索の間にlistの要素と同様にitemに適用される。

Function: union list1 list2 &key :test :test-not :key

この関数は、項目の集合を表現する2つのリストを結合し、それらの2つの集合 の和集合を表現するリストを戻す。結果のリストは、list1または list2に現れるすべての項目を含み、それ以外は含まない。要素が list1list2にともに現れる場合、それは1度だけコピーされる。 項目がlist1またはlist2中で重複している場合、その重複が結果 のリストに生き残るかどうかは未定義である。結果のリスト中の要素の順序も 未定義である。

Function: nunion list1 list2 &key :test :test-not :key

これはunionの破壊版である; コピーするのではなく、可能ならば引数 リストの記憶域を再利用しようと試みる。

Function: intersection list1 list2 &key :test :test-not :key

この関数は、list1list2で表現される集合の積集合を計算する。 それは、list1list2にともに現れる項目のリストを戻す。

Function: nintersection list1 list2 &key :test :test-not :key

これはintersectionの破壊版である。コピーするのではなく、 list1の記憶域を再利用しようと試みる。list2の記憶域は再利用 しない

Function: set-difference list1 list2 &key :test :test-not :key

この関数は、list1list2の“差集合”、すなわちlist1 に現れるがlist2には現れない要素の集合を計算する。

Function: nset-difference list1 list2 &key :test :test-not :key

これは破壊的なset-differenceであり、可能ならlist1を再利用 しようとする。

Function: set-exclusive-or list1 list2 &key :test :test-not :key

この関数は、list1list2の“排他的論理和集合”、すなわち list1list2の正確に1つだけ現れる要素の集合を計算する。

Function: nset-exclusive-or list1 list2 &key :test :test-not :key

これは破壊的なset-exclusive-orであり、可能ならlist1list2を再利用しようとする。

Function: subsetp list1 list2 &key :test :test-not :key

この関数は、list1list2の部分集合を表現しているかどうか、 すなわちlist1の各要素がlist2にも現れるかどうかを チェックする。