% Function SET-DIFFERENCE, NSET-DIFFERENCE
Function SET-DIFFERENCE
, NSET-DIFFERENCE
set-difference
list-1 list-2 &key key test test-not => result-list
nset-difference
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 - リスト
set-difference
は、list-2には現れない、
list-1の要素のリストを返却します。
nset-difference
は、set-difference
の破壊的バージョンです。
list-1はおそらく破壊されます。
list-1のひとつの要素と、list-2のひとつの要素からなる、
全ての順序付けされたペアに対して、
:test
か:test-not
を使ってテストが満たされるかどうかを決定します。
:test
か:test-not
の関数の最初の要素はlist-1の要素であり、
:key
関数によって返却されたものです(もし:key
が指定されたなら)。
二番目の引数はlist-2の要素であり、
:key
関数によって返却されたものです(もし:key
が指定されたなら)。
もし:key
が与えられたなら、
その引数は、list-1かlist-2の要素です。
:key
関数は通常与えられた要素の部分を返却します。
もし:key
が与えられないか、あるいはnil
が指定されたとき、
list-1とlist-2の要素が使われます。
list-1の要素は、 list-2のどの要素にもマッチしないときのみ、 結果に現れます。
どんな方法で引数の順番を変えたとしても、
結果の要素の順番に反映できる保証はありません。
結果のリストは、適切であれば、
list-1かlist-2のどちらかとセルを共有するか、
あるいはeq
になる可能性があります。
(setq lst1 (list "A" "b" "C" "d")
lst2 (list "a" "B" "C" "d")) => ("a" "B" "C" "d")
(set-difference lst1 lst2) => ("d" "C" "b" "A")
(set-difference lst1 lst2 :test 'equal) => ("b" "A")
(set-difference lst1 lst2 :test #'equalp) => NIL
(nset-difference lst1 lst2 :test #'string=) => ("A" "b")
(setq lst1 '(("a" . "b") ("c" . "d") ("e" . "f")))
=> (("a" . "b") ("c" . "d") ("e" . "f"))
(setq lst2 '(("c" . "a") ("e" . "b") ("d" . "a")))
=> (("c" . "a") ("e" . "b") ("d" . "a"))
(nset-difference lst1 lst2 :test #'string= :key #'cdr)
=> (("c" . "d") ("e" . "f"))
lst1 => (("a" . "b") ("c" . "d") ("e" . "f"))
lst2 => (("c" . "a") ("e" . "b") ("d" . "a"))
;; 名前に"c"か"w"を含む全ての食べ物は削除される
(set-difference '("strawberry" "chocolate" "banana"
"lemon" "pistachio" "rhubarb")
'(#\c #\w)
:test #'(lambda (s c) (find c s)))
=> ("banana" "rhubarb" "lemon") ;One possible ordering.
nset-difference
はlist-1を破壊するでしょう。
なし。
list-1とlist-2が通常のリストではないとき、
型type-error
のエラーを通知する準備をしなければなりません。
3.2.1. コンパイラーの用語, 3.6. 横断の規則と副作用
:test-not
パラメーターは非推奨です。