next up previous
Next: 8.2 隣接点リストを頂点シンボルの属性リストで表す Up: 8 グラフの記述 Previous: 8 グラフの記述

8.1 連想リスト

連想リスト(association list)とは,あるものとあるもののペアをコンスの形 で表現したものです.car部に連想のキーとなるデータをおき,cdr部にそのキー で検索されるデータをおきます. たとえば,ソフトウェアの講義とそこで用いられている言語との対応関係を 覚えておいて,講義名からその言語を調べるという場合に以下のように使います.
<cl> (setq *lecture-language*
     '((software1 . pascal)
       (software2 . c)
       (software3 . lisp)
       (software4 . smalltalk)))
((software1 . pascal) (software2 . c)
    (software3 . lisp) (software4 . smalltalk)) 
<cl> (assoc 'software3 *lecture-language*)
(software3 . lisp) 
<cl> (assoc 'software4 *lecture-language*)
(software4 . smalltalk) 

<cl> (defun language-of (lecture database)
            (cdr (assoc lecture database)))
language-of 
<cl> (language-of 'software1 *lecture-language*)
pascal
このようにデータベースからデータをとってくる場合にassocを用います.連 想リストを作る関数としてaconsや pairlis があります.また,assocはデータ をとり出す関数ですが,:test, :keyの引数を与えることができます.
<cl> (acons 'a '(1) '((b 2) (c 3)))
((a 1) (b 2) (c 3)) 
<cl> (pairlis '(a b c) '(1 2 3))
((c . 3) (b . 2) (a . 1)) 
<cl> (pairlis '(a b c) '((1) (2) (3)))
((c 3) (b 2) (a 1)) 
<cl> (assoc 'a '((a 1) (b 2) (c 3)))
(a 1) 
<cl> (assoc '(b) '(((a) 1) ((b) 2) ((c) 3)))
nil 
<cl> (assoc '(b) '(((a) 1) ((b) 2) ((c) 3))
                 :test #'equal)
((b) 2) 
<cl> (assoc 'c '(((a) 1) ((b) 2) ((c) 3))
                 :test #'equal)
nil 
<cl> (assoc 'c '(((a) 1) ((b) 2) ((c) 3))
                 :test #'equal :key #'car)
((c) 3)
この連想リストを用いてグラフを表現したものが*graph2*です.

generated through LaTeX2HTML. M.Inaba 平成18年5月6日