Οι πίνακες κατακερματισμού στην Common Lisp είναι δομές δεδομένων για την αποθήκευση συσχετιστικών δεδομένων. Αντιστοιχίζουν κλειδιά (τα οποία μπορούν να είναι οποιοδήποτε αντικείμενο) σε τιμές (οι οποίες μπορούν να είναι οποιοδήποτε αντικείμενο).
Οι πίνακες κατακερματισμού μπορούν να δημιουργηθούν με τη συνάρτηση make-hash-table.
Η συνάρτηση make-hash-table δέχεται αρκετές παραμέτρους λέξης-κλειδιού για τη λεπτομερή ρύθμιση του αρχικού μεγέθους του πίνακα κατακερματισμού καθώς και του ορίου επαναμεγέθυνσής του. Ανάτρεξε στην τεκμηρίωση για πλήρεις πληροφορίες σχετικά με αυτές.
Το πιο σημαντικό είναι ότι δέχεται επίσης μια παράμετρο λέξης-κλειδιού test, η οποία καθορίζει πώς συγκρίνονται τα κλειδιά κατά την εισαγωγή, την αναζήτηση και την αφαίρεση κλειδιών και τιμών.
Οι τιμές του ορίσματος test μπορούν να είναι μία από τις 'eq, 'eql, 'equal ή 'equalp, οι οποίες αντιστοιχούν στα γενικά κατηγορήματα ισότητας.
Η προεπιλεγμένη τιμή είναι 'eql.
Για να πάρεις μια τιμή με το κλειδί της, χρησιμοποιείς τη gethash.
Η gethash δέχεται ένα [προαιρετικό όρισμα][concept-defualt-arguments] που λειτουργεί ως η τιμή που θα επιστραφεί αν το κλειδί δεν υπάρχει στον πίνακα κατακερματισμού.
Η gethash επιστρέφει επίσης πολλαπλές τιμές (εξηγούνται σε άλλη έννοια).
Η πρώτη τιμή είναι η τιμή αυτού του κλειδιού στον πίνακα κατακερματισμού, η προεπιλεγμένη τιμή αν έχει δοθεί, ή NIL.
Η δεύτερη τιμή είναι Boolean (λογική τιμή) που δείχνει αν το κλειδί υπήρχε στον πίνακα κατακερματισμού ή όχι.
Για να εισαγάγεις ένα ζεύγος κλειδιού-τιμής, χρησιμοποιείς τη setf μαζί με τη gethash.
Για να αφαιρέσεις ένα κλειδί και την τιμή του, χρησιμοποίησε τη remhash.
Για να αφαιρέσεις όλα τα κλειδιά και τις τιμές, χρησιμοποίησε τη clrhash.
Αν και ένας πίνακας κατακερματισμού στη Common Lisp, όπως και σε άλλες γλώσσες, δεν έχει εγγυημένη σειρά, μερικές φορές μπορεί να είναι χρήσιμο να τον διατρέξεις επεξεργαζόμενος κάθε ζεύγος κλειδιού/τιμής.
Αυτό μπορεί να γίνει με τη maphash:
(maphash #'(lambda (key value) (print (cons key value))) *hash-table*)
(Αυτό θα εκτυπώσει κάθε κλειδί και τιμή ως ζεύγος cons, ένα ανά γραμμή.)
(setf *hash-table* (make-hash-table)) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {100375FD23}>
(gethash :foo *hash-table*) ; => NIL
; NIL
(gethash :foo *hash-table*
:default-value) ; => :DEFAULT-VALUE
; NIL
(setf (gethash :foo *hash-table*) :bar) ; => :BAR
(gethash :foo *hash-table*) ; => :BAR
; T
(setf (gethash :key *hash-table*) :value) ; => :RIGHT
(gethash :key *hash-table*) ; => :VALUE
; T
(remhash :key *hash-table*) ; => T
(gethash :key *hash-table*) ; => NIL
; => NIL
(clrhash *hash-table*) ; => #<HASH-TABLE :TEST EQL :COUNT 0 {1005A90103}>
(gethash :foo *hash-table*) ; => NIL
; NIL