Puoi avere tabelle hash o dit in Lisp? Intendo la struttura dei dati che è una raccolta di coppie (chiave, valore) in cui è possibile accedere ai valori utilizzando le chiavi.Puoi avere tabelle hash in lisp?
risposta
In Lisp viene solitamente definito un elenco di proprietà.
Sicuro. Ecco lo SRFI definire le librerie di tabella hash standard nei Schema:
Naturalmente - Common Lisp ha 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
elenchi di proprietà sono buoni per molto piccoli esempi di scopo dimostrativo, ma per qualsiasi esigenza reale la loro performance è abissale, in modo da utilizzare le tabelle hash.
Se si fa riferimento a Common Lisp, hash tables viene fornito da un tipo chiamato hash-table
.
Using these tables comporta la creazione di uno con funzione make-hash-table
, leggere i valori con gethash
ponendoli utilizzando gethash
come place in concerto con setf
, e rimuovendo le voci con remhash
.
La mappatura dal valore chiave al codice hash è disponibile al di fuori delle tabelle hash con la funzione sxhash
.
Clojure ha un tipo di mappa integrata:
user=> (def m {:foo "bar" :baz "bla"})
#'user/m
user=> (m :foo)
"bar"
Common Lisp ha almeno quattro modi diversi per farlo (memorizzazione valore della chiave):
- immobili liste (: foo 1: bar 2)
- elenchi associati ((: foo. 1) (: bar. 2))
- tabelle hash
- oggetti CLOS (valore di slot foo 'bar) per ottenere e (setf (valore di slot foo' bar) 42) da impostare. Il nome dello slot può essere memorizzato in una variabile: (let ((nome 'bar)) (nome valore foo slot)).
Per semplici elenchi di associazioni di utilizzo o elenchi di proprietà vanno bene. Con un numero maggiore di elementi tendono a diventare 'lenti'. Le tabelle hash sono "più veloci" ma hanno i loro compromessi. Gli oggetti CLOS sono usati come in molti altri sistemi di oggetti. Le chiavi sono i nomi degli slot definiti in una classe CLOS. Sebbene sia possibile programmare varianti che possono aggiungere e rimuovere slot all'accesso.
Sono incorporati hash tables, che utilizzano una funzione di hash di sistema (tipicamente SXHASH) e dove è possibile avere un paio di diversi controlli di uguaglianza (EQ, EQL, EQUAL o EQUALP a seconda di ciò che si considera essere "lo stesso" chiave).
Se le tabelle hash incorporate non sono abbastanza buone, è disponibile anche la libreria a generic hash table. Accetterà qualsiasi coppia di "generatore di hash"/"comparatore di chiavi" e ti costruirà una tabella di hash. Tuttavia, si basa sul fatto che una buona funzione di hash funzioni bene e che non sia necessariamente banale da scrivere.
- 1. tabelle hash in prolog
- 2. Tabelle hash usando VLists
- 3. Tabelle hash concatenate e tabelle hash con indirizzo aperto
- 4. Puoi definire tabelle "letterali" in SQL?
- 5. Puoi avere più linee in un elemento ?
- 6. Hash-consing in F # e tabelle hash deboli in .net
- 7. Puoi avere più MySqlCommand in una singola transazione?
- 8. Puoi mostrarmi come riscrivere le funzioni in lisp?
- 9. Layout con div ... ne puoi avere troppi?
- 10. Puoi avere più proprietà meta http-equiv?
- 11. Puoi avere un'interfaccia dipendente da una classe?
- 12. Utilizzo di oggetto stringa come chiave hash in Common Lisp
- 13. Puoi avere due AsyncTask in una sola attività?
- 14. Quante RewriteRules puoi avere in .htaccess senza problemi?
- 15. Puoi avere il pulsante 3D iOS 6 in un MKMapView?
- 16. Puoi avere una logica if-then-else in SQL?
- 17. Quante colonne puoi avere (massimo) in una tabella MySQL?
- 18. Puoi avere un tempo senza una data in binari?
- 19. In Lisp, quanti ingressi può avere effettivamente la funzione +?
- 20. Hash: tabelle, elenchi e mappe, oh mio?
- 21. Puoi avere più di un runloop per thread su iOS?
- 22. puoi usare gli stream dynamodb per avere trigger in tempo reale come firebase?
- 23. Puoi avere una serie di diversi tipi di oggetti?
- 24. #pragma objective-c: puoi avere più di un semplice 'segno'?
- 25. Puoi avere <span> entro <span>?
- 26. È possibile avere tabelle temporanee in una funzione?
- 27. Possiamo avere un trigger singolo per più tabelle in MySQL
- 28. Un modello può avere più tabelle in CakePHP?
- 29. Puoi avere mongo $ push prepend invece di append?
- 30. Serializzare un hash di hash di emacs in file
No, gli elenchi di proprietà sono qualcosa di diverso. Vedere il glossario CLHS: http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_p.htm#property_list –
Sì e no - un elenco di proprietà non è una tabella hash, ma fornisce un dizionario simile interfaccia (e la sua domanda specifica "... la struttura dei dati che è un insieme di coppie (chiave, valore) in cui i valori possono essere acceduti usando le chiavi." Un elenco di proprietà fornisce certamente esattamente ciò, anche se senza hashing (o qualcosa che si avvicina allo stesso prestazione...) –