association リスト(略して alist)は、pair (訳注:対)(コンスセル) のリストで、各 サブリストの car がキーで cdr がそれに対する値であるものです。新しい pair はリ ストの前に追加されていくため、 association リストはしばしばスタックに保持する 情報を記録するのに用います。
シンボル A に値 1、値 5 にリスト (2)、が対応する alist は次のようになります。
((A . 1) (5 2))
(与えられた)キーで pair を検索すると、 (対応する pair が複数存在する場合) その キーを持つ最初の pair が返されます。キーはどんな Lisp オブジェクトであってもか まいません。 association リストの要素は、コンスセルでなくてもエラーにはなりま せん。
Function: assoc key alist
この関数は、 alist において key に対応する(最初の) pair を返します。 alist に、その car が key と equal である pair が存在しない場合、nil を返しま す。
(setq x '((a . 1) ((b) 2) (a . 99))) => ((a . 1) ((b) 2) (a . 99))
(assoc 'a x) => (a . 1) (assoc '(b) x) => ((b) 2)
Function: assq key alist
(assoc 同様)この関数も、 alist において key に対応する(最初の) pair を返し ます。 alist に、その car が key と eq である pair が存在しない場合、nil を返します。 eq は equal より速く、ほとんどの alist はシンボルをキーとして 用いるため、 (この関数は) assoc より頻繁に用いられます。
(setq x '((a . 1) ((b) 2) (a . 99))) => ((a . 1) ((b) 2) (a . 99)) (assq 'a x) => (a . 1) (assq '(b) x) => nil
Function: rassq alist value
rassq は、 alist pair の car のかわりに cdr を調べる点を除いて assq と同じ です。この関数は alist 中の value に対する最初の pair を返します。 alist 中に value に eq な cdr が存在しない場合 nil を返します。
(setq alist '((a . 1) ((b) 2) (99 . 1))) => ((a . 1) ((b) 2) (99 . 1)) (rassq 1 x) => (a . 1)
Function: copy-alist alist
この関数は、 alist の深さ 2 レベルのコピーを返します。各 pair のコピーを
(新しく)作り、前のものを変更することなく、新しい alist における association (訳注:対応関係)を変更できるようにします。
(setq alist '((a . 1) (b (2)))) => ((a . 1) (b (2))) (setq copy (copy-alist alist)) => ((a . 1) (b (2))) (eq alist copy) => nil (eq (car alist) (car copy)) => nil (cdr (car (cdr alist))) => ((2)) (eq (cdr (car (cdr alist))) (cdr (car (cdr copy)))) => t