Hash-table

今日はQ-learningのレポートの為のプログラムを書いた.学習の結果は行動価値表(Q-table)という,状態とその状態における行動からなる二次元テーブルに保存される.
Q-tableを表現するためにハッシュテーブルにベクターを登録したものを使った.LISPのハッシュテーブルは追加と削除が自由にできるデータ構造だ.アルゴリズムの授業ではハッシュ関数だとか,ハッシュ値の重複のときのチェイン法だとかを考えなければならなかったが,LISPではそれは処理系の仕事.

(setq hash-test (make-hash-table))     ;hash-tableのコンストラクタ
(setf (gethash 'color hash-test) 'red) ;hash-tableへの登録
(gethash 'color hash-test)             ;hash-tableへのアクセス
=> RED, T

(setf (gethash 'color hash-test) "red")
(gethash 'color hash-test)
=> "red", T

(remhash 'color hash-test)             ;hash-tableからの削除
=> T

キーはシンボルでなければいけないみたい.ハッシュテーブルに登録するデータはなんでもいい.
HyperSpec(http://www.lispworks.com/documentation/HyperSpec/Body/18_aa.htm)