<cl> (get 's 'neighbors) (a d) <cl> (get 'd 'neighbors) (s a e) <cl> (get 'x 'neighbors) nil属性リストの内部での表現は,キーとデータが交互に 入ったリストになっています.シンボルの属性リスト全体を 返す関数として,symbol-plistというものがあります. また,属性のキーをなくすための関数としてrempropがあり, getに第三引数を与えた場合には,第二引数で与えた属性が なかった場合に返すその第三引数に与えた値が返ります. 属性リストでグラフの隣接点を表現した場合に, グラフ全体に存在する頂点すべてを知るためには, 別のシンボル(上では*graph3*)にその頂点のリストを覚えて おかないと今考えているグラフの頂点がどれかわからなくなります. しかし,リスプのシンボルすべてのうちでneighborsという属性を 持ったものを探すためにはどうするか,という場合には, do-all-symbolsというマクロがあります.以下のように使えます.
<cl> (do-all-symbols (sym) (if (get sym 'neighbors) (print (list sym (get sym 'neighbors))))) (a (s b d)) (b (a c e)) (c (b)) (d (s a e)) (e (b d f)) (f (e)) (s (a d)) nil <cl>