【Common Lisp】ハッシュテーブルの基本
lispのハッシュテーブルの勉強メモです。
ハッシュテーブル
ハッシュテーブルはlispの持つ複合的なデータ型の一つで、キーと値をセットにして管理します。連想リストと似ていますが、より高速に定数時間で要素にアクセスできます。
ハッシュテーブルを作る
make-hash-tableを使います。
CL-USER> (defparameter x (make-hash-table)) X CL-USER> x #S(HASH-TABLE :TEST FASTHASH-EQL)
値を取り出す・格納する
キーを指定して要素にアクセスするにはgethashを使います。setfと組み合わせることで指定したキーと値のセットを格納することができます。
CL-USER> (gethash 'yup x) NIL NIL CL-USER> (setf (gethash 'yup x) 25) 25 CL-USER> (gethash 'yup x) 25 T
gethashが2つの値を返していますが、1つ目は要素の値を、2つ目は指定したキーを持つ要素が見つかったか否かを示しています。
要素を削除する
remhashを使います。remhashは指定したキーを持つ要素が存在すれば削除してtを返し、存在しなければnilを返します。
CL-USER> (remhash 'yup x) T CL-USER> (gethash 'yup x) NIL NIL CL-USER> (remhash 'yup x) NIL
参考
コンラッド・バルスキ(2013)「Land of Lisp」 川合史郎訳 オライリー・ジャパン