Ink

Contents related to tech, hobby, etc

ElispのHash Tableのキーの一意性確認のための方法について

|

ElispのHash Tableのキーの一意性確認のための方法について

Hash Tableの種類

elispにおいてHash Tableは一つではあるが、キーを比較するための方法は 複数存在する (help:make-hash-table)

そして、この比較する方法の違いを把握してないと「何故これが重複して存在するの!?」 みたいなことになるので気をつける必要がある。

一応ユーザーが自分で実装することもできるそうだが (elisp#Defining Hashhelp:define-hash-table-test を参照)、 今回はそれは含めない。

情報源は elisp#Creating Hash

eql (デフォルト)

数字(float若しくはinteger)は equal で等しければ同じと判断され、 他のオブジェクトは全て等しくなることはない (!)

equal

equal によって判定される。

eq

異なるLispオブジェクトは同じになることはない。

「こういう時は?」

キーに文字列を使いたい

デフォルトの eql では決して等しくならない 'equal にする

(make-hash-table :test 'equal)