% Function MEMBER, MEMBER-IF, MEMBER-IF-NOT
Function MEMBER, MEMBER-IF, MEMBER-IF-NOT
member item list &key key test test-not => tail
member-if predicate list &key key => tail
member-if-not predicate list &key key => tail
item - オブジェクト
list - 通常のリスト
predicate - 1つの引数を取りgeneralized-booleanを返却する関数の指定子
test - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
test-not - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
key - 1つの引数を取る関数の指定子、またはnil
tail - リスト
member, member-if, member-if-notは
それぞれlistからitemを探すか、
あるいはtestをみなすトップレベルの要素を探します。
predicate関数の引数は、listの要素です。
もしある要素がtestを満たすときは、
その要素で始まるリストの末尾を返します。
それ以外はnilを返却します。
listはトップレベルのみで検索されます。
(member 2 '(1 2 3)) => (2 3)
(member 2 '((1 . 2) (3 . 4)) :test-not #'= :key #'cdr) => ((3 . 4))
(member 'e '(a b c d)) => NIL
(member-if #'listp '(a b nil c d)) => (NIL C D)
(member-if #'numberp '(a #\Space 5/3 foo)) => (5/3 FOO)
(member-if-not #'zerop
'(3 6 9 11 . 12)
:key #'(lambda (x) (mod x 3))) => (11 . 12)
なし。
なし。
listが通常のリストではないとき、
型type-errorのエラーを通知する準備をする必要があります。
find,
position,
3.6. 横断の規則と副作用
:test-notパラメーターは非推奨です。
関数member-if-notは非推奨です。
下記の例を考えます。
(member 'a '(g (a y) c a d e a f)) => (A D E A F)
memberによって返却された値は、aから始まるリストの位置と同一です。
したがって、memberの結果をrplacaすることで、
aが発見された場所のリストの部分を変更することができます。
(memberがnilを返却していないという
チェックがされていると仮定しています。)