Estoy tratando de crear un tipo de "diccionario", es decir, una tabla hash con una cadena como clave. ¿Es esto posible o sabio en Lisp?Usando un objeto de cadena como una clave hash en Common Lisp
me di cuenta de 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, el 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
Justicle, el CLHS simplemente tiene esto como ejemplo. Si no es obvio, puede ser útil consultar la documentación: http://www.lispworks.com/documentation/HyperSpec/Body/f_mk_has.htm –
Utilice EQUALP en su lugar si desea el hash de cadenas que no distingue entre mayúsculas y minúsculas. – skypher
Gracias amigos. Había revisado los documentos, pero realmente no le había prestado suficiente atención a las muchas funciones de igualdad para esa parte en particular, para hacer que todo funcionara bien conmigo. Estaba bajo la suposición (incorrecta) de que "debería hacer lo que necesito". – Justicle