Function ADJOIN
adjoin item list &key key test test-not => new-list
item - オブジェクト
list - 通常のリスト
test - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
test-not - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
key - 1つの引数を取りgeneralized-booleanを返却する関数の指定子、 またはnil
new-list - リスト
itemと同じものが、listの既存の要素にあるかどうかをテストします。 もしitemが既存の要素に存在しないときは、 adjoinは、consによってlistに追加したあと、 その結果を返却します。 存在するときは、何も加えないまま元のlistを返却します。
test, test-notとkeyは、listの要素とitemが 同じかどうかをどのように決めるかに影響します。 詳しい説明は17.2.1. 2つの引数のテストをご確認ください。
(setq slist '()) =>  NIL 
(adjoin 'a slist) =>  (A) 
slist =>  NIL 
(setq slist (adjoin '(test-item 1) slist)) =>  ((TEST-ITEM 1)) 
(adjoin '(test-item 1) slist) =>  ((TEST-ITEM 1) (TEST-ITEM 1)) 
(adjoin '(test-item 1) slist :test 'equal) =>  ((TEST-ITEM 1)) 
(adjoin '(new-test-item 1) slist :key #'cadr) =>  ((TEST-ITEM 1)) 
(adjoin '(new-test-item 1) slist) =>  ((NEW-TEST-ITEM 1) (TEST-ITEM 1)) なし。
listが通常のリストではないとき、 型type-errorのエラーを通知する準備をしなければなりません。
pushnew, 3.6. 横断の規則と副作用
:test-notパラメーターは非推奨です。
(adjoin item list :key fn)
  ==  (if (member (fn item) list :key fn) list (cons item list))