これらの関数は、要素の集合を表現するリストに作用する。
このMacLisp互換の関数は、itemとequal
である要素を見つける
ためにlistを検索する。member
関数はEmacs 19へ組み込まれて
いる; このパッケージは、Emacs 18に同等にそれを定義する。Common Lisp互
換版の下記の関数を参照せよ。
この関数は、itemとマッチする要素を見つけるためにlistを
検索する。マッチが見つかった場合、そのcar
がマッチする要素である
コンスセルを戻す。さもなければnil
を戻す。要素は、既定では
eql
で比較される; この振る舞いを修正するために、:test
や
:test-not
、:key
引数を使ってもよい。See 列.
この関数の名前は、Emacs 19に定義されている非互換なmember
関数を
避けるために、‘*’で接尾辞づけられていることに注意せよ(その関数は
比較にequal
を使う; それは
(member* item list :test 'equal)
と同等である)。
member-if
とmember-if-not
関数は同様に、与えられた述語を
満たす要素を検索する。
この関数は、sublistがlistの副リスト、すなわちsublist
がlistまたはそのcdr
のいずれかとeql
である場合に、
t
を戻す。
この関数は、itemがそのリストにまだ存在しない場合(member*
によって決定される)にだけ、(cons item list)
のように、
listの先頭にitemをコンスする。:key
引数が指定された
場合、itemがリストの一部に“なろうとしている”のを推理するために、
検索の間にlistの要素と同様にitemに適用される。
この関数は、項目の集合を表現する2つのリストを結合し、それらの2つの集合 の和集合を表現するリストを戻す。結果のリストは、list1または list2に現れるすべての項目を含み、それ以外は含まない。要素が list1とlist2にともに現れる場合、それは1度だけコピーされる。 項目がlist1またはlist2中で重複している場合、その重複が結果 のリストに生き残るかどうかは未定義である。結果のリスト中の要素の順序も 未定義である。
これはunion
の破壊版である; コピーするのではなく、可能ならば引数
リストの記憶域を再利用しようと試みる。
この関数は、list1とlist2で表現される集合の積集合を計算する。 それは、list1とlist2にともに現れる項目のリストを戻す。
これはintersection
の破壊版である。コピーするのではなく、
list1の記憶域を再利用しようと試みる。list2の記憶域は再利用
しない。
この関数は、list1とlist2の“差集合”、すなわちlist1 に現れるがlist2には現れない要素の集合を計算する。
これは破壊的なset-difference
であり、可能ならlist1を再利用
しようとする。
この関数は、list1とlist2の“排他的論理和集合”、すなわち list1とlist2の正確に1つだけ現れる要素の集合を計算する。
これは破壊的なset-exclusive-or
であり、可能ならlist1と
list2を再利用しようとする。
この関数は、list1がlist2の部分集合を表現しているかどうか、 すなわちlist1の各要素がlist2にも現れるかどうかを チェックする。