% Function RASSOC, RASSOC-IF, RASSOC-IF-NOT
Function RASSOC
, RASSOC-IF
, RASSOC-IF-NOT
rassoc
item alist &key key test test-not => entry
rassoc-if
predicate alist &key key => entry
rassoc-if-not
predicate alist &key key => entry
item - オブジェクト
alist - 連想リスト
predicate - 1つの引数を取りgeneralized-booleanを返却する関数の指定子
test - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
test-not - 2つの引数を取りgeneralized-booleanを返却する関数の指定子
key - 1つの引数を取る関数の指定子、またはnil
entry - alistの要素であるコンスか、nil
rassoc
, rassoc-if
, rassoc-if-not
は、
alistにcdr
がtestを満たすようなコンスがあれば返却し、
そのようなコンスが見つからないときはnil
を返却します。
もしalistのペアが現れる場所にnil
あったとは無視します。
(setq alist '((1 . "one") (2 . "two") (3 . 3)))
=> ((1 . "one") (2 . "two") (3 . 3))
(rassoc 3 alist) => (3 . 3)
(rassoc "two" alist) => NIL
(rassoc "two" alist :test 'equal) => (2 . "two")
(rassoc 1 alist :key #'(lambda (x) (if (numberp x) (/ x 3)))) => (3 . 3)
(rassoc 'a '((a . b) (b . c) (c . a) (z . a))) => (C . A)
(rassoc-if #'stringp alist) => (1 . "one")
(rassoc-if-not #'vectorp alist) => (3 . 3)
なし。
なし。
なし。
assoc
,
3.6. 横断の規則と副作用
:test-not
は、非推奨です。
関数rassoc-if-not
は、非推奨です。
alistを更新するために、
rassoc
の結果がnil
でなければ、
rplaca
を使うことができます。
次の2つの式
(rassoc item list :test fn)
(find item list :test fn :key #'cdr)
これらは、ひとつの例外を除いては同じ意味です。
例外は、itemがnil
であり、
かつalistのペアの場所にnil
が現れるときです。
関数assoc
をご確認下さい。