Function UNION, NUNION

UP


Function UNION, NUNION

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 - リスト

定義

unionnunionは、 list-1list-2のどちらかに生じたすべての要素を含むリストを返却します。

list-1のひとつの要素と、list-2のひとつの要素からなる、 全ての順序付けされたペアに対して、 :test:test-notを使ってテストが満たされるかどうかを決定します。 :test:test-notの関数の最初の要素はlist-1の要素であり、 :key関数によって返却されたものです(もし:keyが指定されたなら)。 二番目の引数はlist-2の要素であり、 :key関数によって返却されたものです(もし:keyが指定されたなら)。

:key関数の引数は、list-1list-2の要素です。 返却値は、引数で与えられたリスト要素からなる、 判定に使われる要素の部分です。 もし:keyが与えられないか、あるいはnilが指定されたとき、 list-1list-2の要素自身がが使われ、 :test:test-not関数に供給されます。

全てのマッチしたペアに対して、 そのペアの2つの要素のうちのひとつが結果に含まれます。 list-1list-2のどちらかの要素が、 もう一方の要素にマッチしないものがあれば、それが結果に含まれます。

list-1list-2に重複があるとき、 重複している要素のうちひとつだけが結果に含まれます。 list-1list-2のどちらかの中に重複するものがあるときは、 その冗長な要素は結果に現れるかもしれませんし、 現れないかもしれません。

結果の要素の順番は、list-1list-2の順番を反映する必要はありません。 適切に評価されたのであれば、list-1list-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))
OR=>  ((X 4) (Y 6) (Z 2))

(setq lst1 (list 1 2 '(1 2) "a" "b")
      lst2 (list 2 3 '(2 3) "B" "C"))
=>  (2 3 (2 3) "B" "C")
(nunion lst1 lst2)
=>  (1 (1 2) "a" "b" 2 3 (2 3) "B" "C") 
OR=>  (1 2 (1 2) "a" "b" "C" "B" (2 3) 3)

副作用

nunionは、list-1list-2のリスト構造のcar, cdrの どの部分も修正することが許されています。

影響

なし。

例外

list-1list-2が通常のリストではないとき、 型type-errorのエラーを通知する準備をしなければなりません。

参考

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

備考

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

nunionの副作用は必要ないため、 移植可能なコードにおいては副作用のみを期待した姿勢で使うべきではありません。


TOP, Github