Подтвердить что ты не робот

Использование строкового объекта в качестве хеш-ключа в 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
4b9b3361

Ответ 1

Вам нужно сделать хеш-таблицу, которая использует "equal вместо if" eql. 'eql не оценивает две строки с одним и тем же содержимым на' t, а 'равно.

Вот как вы это делаете:

(make-hash-table :test 'equal)

Как сказал Скифер, вы также можете использовать "equalp", если хотите хэширование строки без учета регистра.