¿Puede usted tener tablas hash o dicts en Lisp? Me refiero a la estructura de datos que es una colección de pares (clave, valor) donde los valores pueden ser accedidos usando claves.¿Puedes tener tablas hash en lisp?
Respuesta
En Lisp generalmente se llama lista de propiedades.
Sure. Aquí está la definición de las bibliotecas SRFI tabla de hash estándar en el Esquema:
Por supuesto - Common Lisp tiene hash tables.
(setq a (make-hash-table))
(setf (gethash 'color a) 'brown)
(setf (gethash 'name a) 'fred)
(gethash 'color a) => brown
(gethash 'name a) => fred
(gethash 'pointy a) => nil
listas de propiedades son muy buenos para pequeños ejemplos de finalidad demostrativa, sino para cualquier verdadero necesitan su rendimiento es pésimo, a fin de utilizar tablas hash.
Si se refiere a Common Lisp, hash tables son proporcionados por un tipo llamado hash-table
.
Using these tables implica la creación de uno con la función de make-hash-table
, la lectura de los valores con gethash
, el establecimiento de ellos mediante el uso gethash
como place en concierto con setf
, y la eliminación de entradas con remhash
.
La asignación desde el valor de la clave al código hash está disponible fuera de las tablas hash con la función sxhash
.
Clojure tiene un tipo de mapa integrado:
user=> (def m {:foo "bar" :baz "bla"})
#'user/m
user=> (m :foo)
"bar"
Common Lisp tiene al menos cuatro formas diferentes de hacer que (el almacenamiento de claves de valor):
- propiedad lists (: foo 1: bar 2)
- listas de asociaciones ((: foo. 1) (: barra .2))
- tablas hash
- Objetos CLOS (valor de ranura foo 'bar) para obtener y (setf (valor de ranura foo' barra) 42) para establecer. El nombre de la ranura se puede almacenar en una variable: (let ((name 'bar)) (slot-value foo name)).
Para un uso simple, las listas de asociaciones o las listas de propiedades están bien. Con una mayor cantidad de elementos, tienden a ser "lentos". Las tablas hash son 'más rápidas' pero tienen sus propias compensaciones. Los objetos CLOS se usan como en muchos otros sistemas de objetos. Las claves son los nombres de ranura definidos en una clase CLOS. Aunque es posible programar variantes que pueden agregar y quitar ranuras en el acceso.
Hay hash tables incorporado, que utiliza una función de sistema hash (normalmente SXHASH) y donde puede tener un par de diferentes inspectores de igualdad (EQ, EQL, EQUAL o EQUALP dependiendo de lo que considere que es "lo mismo" llave).
Si las tablas hash incorporadas no son lo suficientemente buenas, también hay una biblioteca a generic hash table. Aceptará cualquier par de "generador de hash"/"comparador de claves" y te creará una tabla hash. Sin embargo, depende de tener una buena función hash para funcionar bien y eso no es necesariamente trivial para escribir.
- 1. Tablas hash en prolog
- 2. tablas hash en powershell
- 3. Puedes tener #regiones en Android/eclipse
- 4. ¿Puedes tener demasiado "dinámico" en idiomas dinámicos?
- 5. ¿Puedes tener clases anidadas en PHP?
- 6. Igualdad en tablas hash Ocaml
- 7. Búsqueda de tablas hash: con hash perfecto, en C
- 8. Tablas hash VS matrices asociativas
- 9. ¿Cómo usar tablas Hash (diccionarios) en MATLAB?
- 10. ¿Puedes tener múltiples versiones de una gema en un Gemfile?
- 11. ¿Puedes tener mongo $ push prepend en lugar de append?
- 12. ¿Puedes tener el botón iOS 6 3D en una MKMapView?
- 13. Serializar un hash de emacs lisp en el archivo
- 14. ¿Cómo se observan las tablas hash JavaScript en Knockout?
- 15. Soy lisp noobie, y necesito una clase de tabla hash.
- 16. Cómo tener varias tablas jQuery TableSorter en una página
- 17. ¿Es posible tener tablas temporales en una función?
- 18. ¿Puede un modelo tener múltiples tablas en CakePHP?
- 19. Common Lisp: taquigrafía para inicializar una tabla hash con muchas entradas
- 20. Tablas hash v árboles de búsqueda de autoequilibrado
- 21. Debajo del capó, ¿los objetos de Javascript tienen tablas hash?
- 22. ¿Cómo obtener el recuento de tablas hash de JavaScript?
- 23. PINTURA en Emacs Lisp?
- 24. ¿Crees dos archivos para tener el mismo hash?
- 25. ¿Puedes escribir en [PC]?
- 26. Punteros en Lisp?
- 27. ¿Por qué no puedes declarar una estructura estática en C#, pero pueden tener métodos estáticos?
- 28. Common Lisp a Lisp-n?
- 29. Uso de objetos CLOS de Common Lisp como claves en una tabla hash?
- 30. Usando un objeto de cadena como una clave hash en Common Lisp
No, las listas de propiedades son algo diferente. Consulte el glosario de CLHS: http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_p.htm#property_list –
Sí y no: una lista de propiedades no es una tabla hash, pero proporciona un diccionario similar interfaz (y su pregunta especifica "... la estructura de datos que es una colección de pares (clave, valor) donde los valores pueden accederse usando claves." Una lista de propiedades ciertamente proporciona exactamente eso, aunque sin hash (o cualquier cosa que se aproxime al mismo actuación...) –