Common Lispで文字列オブジェクトをハッシュキーとして使用する 質問する

Common Lispで文字列オブジェクトをハッシュキーとして使用する 質問する

「辞書」型、つまり文字列をキーとするハッシュ テーブルを作成しようとしています。これは Lisp で可能でしょうか、または賢明でしょうか?

これは期待通りに動作することに気づきました:

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA46>
> (setf (gethash 1 table) "one")
"one"
> (gethash 1 table)
"one"

ただし、次の場合は当てはまりません。

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> table
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> (setf (gethash "one" table) 1)
1
> (gethash "one" table)
NIL
NIL

ベストアンサー1

'eql の代わりに 'equal を使用するハッシュ テーブルを作成する必要があります。'eql は同じ内容の 2 つの文字列を 't に評価しませんが、'equal は評価します。

やり方は次のとおりです:

(make-hash-table :test 'equal)

skypher が指摘したように、大文字と小文字を区別しない文字列ハッシュが必要な場合は、代わりに 'equalp を使用することもできます。

おすすめ記事