npt-japanese

% Function ASSOC, ASSOC-IF, ASSOC-IF-NOT

UP


Function ASSOC, ASSOC-IF, ASSOC-IF-NOT

Function ASSOC, ASSOC-IF, ASSOC-IF-NOT

構文

assoc item alist &key key test test-not => entry
assoc-if predicate alist &key key => entry
assoc-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

定義

assoc, assoc-if, assoc-if-notは、 alistcartestを満たすようなコンスがあれば返却し、 そのようなコンスが見つからないときはnilを返却します。

assoc, assoc-if, assoc-if-notは、 もしalistのペアが現れる場所にnilあったとは無視します。

例文

(setq values '((x . 100) (y . 200) (z . 50))) =>  ((X . 100) (Y . 200) (Z . 50))
(assoc 'y values) =>  (Y . 200)
(rplacd (assoc 'y values) 201) =>  (Y . 201)
(assoc 'y values) =>  (Y . 201)
(setq alist '((1 . "one")(2 . "two")(3 . "three"))) 
=>  ((1 . "one") (2 . "two") (3 . "three"))
(assoc 2 alist) =>  (2 . "two")
(assoc-if #'evenp alist) =>  (2 . "two")
(assoc-if-not #'(lambda(x) (< x 3)) alist) =>  (3 . "three")
(setq alist '(("one" . 1)("two" . 2))) =>  (("one" . 1) ("two" . 2))
(assoc "one" alist) =>  NIL
(assoc "one" alist :test #'equalp) =>  ("one" . 1)
(assoc "two" alist :key #'(lambda(x) (char x 2))) =>  NIL 
(assoc #\o alist :key #'(lambda(x) (char x 2))) =>  ("two" . 2)
(assoc 'r '((a . b) (c . d) (r . x) (s . y) (r . z))) =>   (R . X)
(assoc 'goo '((foo . bar) (zoo . goo))) =>  NIL
(assoc '2 '((1 a b c) (2 b c d) (-7 x y z))) =>  (2 B C D)
(setq alist '(("one" . 1) ("2" . 2) ("three" . 3)))
=>  (("one" . 1) ("2" . 2) ("three" . 3))
(assoc-if-not #'alpha-char-p alist
              :key #'(lambda (x) (char x 0))) =>  ("2" . 2)

影響

なし。

例外

alistが連想リストではないときは、 型type-errorを通知する準備をしなければなりません。

参考

rassoc, find, member, position, 3.6. 横断の規則と副作用

備考

:test-notは、非推奨です。

関数assoc-if-notは、非推奨です。

alistを更新するために、 assocの結果がnilでなければ、 rplacdを使うことができます。

次の2つの式

(assoc item list :test fn)
(find item list :test fn :key #'car)

これらは、ひとつの例外を除いては同じ意味です。 例外は、もしalistのペアの場所でnil現れて、 かつitemnilのとき、 findの場合は、nilcarを計算し、 itemと同じということでnilを返却しますが、 一方assocは、 alistnilを無視するため、 継続してcarnilである実際のコンスを探します。


TOP, Github