Pregunta

Estoy intentando crear un " diccionario " tipo - es decir, tabla hash con una cadena como clave. ¿Es esto posible o sabio en Lisp?

Noté que esto funciona como se esperaba:

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

Sin embargo, lo siguiente no:

> (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
¿Fue útil?

Solución

Necesitas hacer una tabla hash que use 'igual en lugar de' eql. 'eql no evalúa dos cadenas con el mismo contenido que' t, mientras que 'igual hace'.

Así es como lo haces:

(make-hash-table :test 'equal)

Como señaló Skypher, también puedes usar 'equalp en su lugar si quieres un hashing de cadenas que no distinga mayúsculas y minúsculas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top