「辞書」型、つまり文字列をキーとするハッシュ テーブルを作成しようとしています。これは 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 を使用することもできます。