Go to the first, previous, next, last section, table of contents.

association (訳注:連想)リスト

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


Go to the first, previous, next, last section, table of contents.