جداول التجزئة في Common Lisp هي هياكل بيانات لتخزين البيانات الترابطية. وهي تربط المفاتيح (التي يمكن أن تكون أي كائن) بالقيم (التي يمكن أن تكون أي كائن).
يمكن إنشاء جداول التجزئة باستخدام الدالة make-hash-table.
تأخذ الدالة make-hash-table عدة معاملات مفتاحية لضبط الحجم الابتدائي لجدول التجزئة وعتبة تغيير حجمه؛ راجع التوثيق للحصول على معلومات كاملة عنها.
والأهم من ذلك أنها تأخذ أيضًا معاملًا مفتاحيًا باسم test يحدد كيفية مقارنة المفاتيح أثناء إدراج المفاتيح والقيم والبحث عنها وإزالتها.
يمكن أن تكون قيم الوسيط test واحدة من 'eq أو 'eql أو 'equal أو 'equalp، وهي تقابل محمولات التساوي العامة.
القيمة الافتراضية هي 'eql.
للحصول على قيمة بواسطة مفتاحها يُستخدم gethash.
تأخذ gethash [وسيطًا اختياريًا][concept-defualt-arguments] يعمل كقيمة تُرجع إذا لم يكن المفتاح موجودًا في جدول التجزئة.
تُرجع gethash أيضًا قيمًا متعددة (موضحة في مفهوم آخر).
القيمة الأولى هي قيمة ذلك المفتاح في جدول التجزئة، أو القيمة الافتراضية إن وُجدت، أو NIL.
القيمة الثانية هي قيمة منطقية تشير إلى ما إذا كان المفتاح موجودًا في جدول التجزئة أم لا.
لإدراج زوج من مفتاح وقيمة يُستخدم 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