Function UNION
, NUNION
union
list-1 list-2 &key key test test-not => result-list
nunion
list-1 list-2 &key key test test-not => result-list
list-1 - 通常のリスト
list-2 - 通常のリスト
test - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
test-not - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
key - 1つの引数を取りgeneralized-booleanを返却する関数の指定子、 またはnil
result-list - リスト
union
とnunion
は、 list-1かlist-2のどちらかに生じたすべての要素を含むリストを返却します。
list-1のひとつの要素と、list-2のひとつの要素からなる、 全ての順序付けされたペアに対して、 :test
か:test-not
を使ってテストが満たされるかどうかを決定します。 :test
か:test-not
の関数の最初の要素はlist-1の要素であり、 :key
関数によって返却されたものです(もし:key
が指定されたなら)。 二番目の引数はlist-2の要素であり、 :key
関数によって返却されたものです(もし:key
が指定されたなら)。
:key
関数の引数は、list-1かlist-2の要素です。 返却値は、引数で与えられたリスト要素からなる、 判定に使われる要素の部分です。 もし:key
が与えられないか、あるいはnil
が指定されたとき、 list-1とlist-2の要素自身がが使われ、 :test
か:test-not
関数に供給されます。
全てのマッチしたペアに対して、 そのペアの2つの要素のうちのひとつが結果に含まれます。 list-1かlist-2のどちらかの要素が、 もう一方の要素にマッチしないものがあれば、それが結果に含まれます。
list-1とlist-2に重複があるとき、 重複している要素のうちひとつだけが結果に含まれます。 list-1かlist-2のどちらかの中に重複するものがあるときは、 その冗長な要素は結果に現れるかもしれませんし、 現れないかもしれません。
結果の要素の順番は、list-1とlist-2の順番を反映する必要はありません。 適切に評価されたのであれば、list-1とlist-2は、 結果のリストに対してeq
で一致するかもしれません。
union '(a b c) '(f a d))
(=> (A B C F D)
OR=> (B C F A D)
OR=> (D F A B C)union '((x 5) (y 6)) '((z 2) (x 4)) :key #'car)
(=> ((X 5) (Y 6) (Z 2))
4) (Y 6) (Z 2))
OR=> ((X
setq lst1 (list 1 2 '(1 2) "a" "b")
(list 2 3 '(2 3) "B" "C"))
lst2 (=> (2 3 (2 3) "B" "C")
nunion lst1 lst2)
(=> (1 (1 2) "a" "b" 2 3 (2 3) "B" "C")
1 2 (1 2) "a" "b" "C" "B" (2 3) 3) OR=> (
nunion
は、list-1かlist-2のリスト構造のcar
, cdr
の どの部分も修正することが許されています。
なし。
list-1とlist-2が通常のリストではないとき、 型type-error
のエラーを通知する準備をしなければなりません。
intersection
, 3.2.1. コンパイラーの用語, 3.6. 横断の規則と副作用
:test-not
パラメーターは非推奨です。
nunion
の副作用は必要ないため、 移植可能なコードにおいては副作用のみを期待した姿勢で使うべきではありません。