連想リスト

Last-modified: 2011-05-31 (火) 02:08:57

連想リストとは、長さ2のリスト*1を要素とする任意長のリストである。

(setq capitalCityOf '(("Brazil" "Brazilia") ("France" "Paris") ("Israel" "Jeusalem") ("Japan" "Tokyo")))

連想リストから、特定のキーに該当するエントリーを取り出すのには assoc 関数、assv 関数、assq 関数を使う。値同士の比較に equal 関数を使うのが assoc 関数、eqv 関数を使うのが assv 関数、eq 関数を使うのが assq 関数であり、いずれも使い方の形式は同じである。

; assoc関数でキーのリストを取り出す
(assoc "Israel" capitalCityOf)
→ ("Israel" "Jerusalem")
; 存在しないとnilを返す
(assoc "Atlantis" capitalCityOf)
→ nil
; 値の入れ替え例(破壊的なリスト操作の場合)
(rplaca (cdr (assoc "Japan" capitalCityOf)) "Osaka")
capitalCityOf
→ (("Brazil" "Brazilia") ("France" "Paris") ("Israel" "Jeusalem") ("Japan" "Osaka"))

*1 多くのLISP系言語と違い、SKILL言語ではcdr部分がアトムになっているconsセルを扱うことが出来ないため、このような定義になっている。そのため、連想リストについては、他のLISP系言語との互換性がない。