% 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
を返却していないという
チェックがされていると仮定しています。)