摘自 《ANSI Common Lisp》
一、
make-hash-table 来构造一个哈希表,它不需要传入参数:
CL-USER> (setf ht (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x2100B83D2D>
一个哈希表,像是一个关联列表,是一种表达相关对象的方式。要取出与一给定键值有关的数值,我们调用 gethash 并传入一个键值与哈希表。预设情况下,如果没有与这个键值相关的数值,gethash 会返回 nil 。
CL-USER> (gethash 'color ht)
NIL
NIL
在这里我们首次看到 Common Lisp最突出的特色之一:一个表达式可以返回多个数值。
把数值与键值做关联,我们使用gethash 搭配 setf :
CL-USER> (setf (gethash 'color ht) 'red)
RED
CL-USER> (gethash 'color ht)
RED
T
要从集合中移除一个对象,你可以调用 remhash,它从一个哈希表中移除一个词条:
CL-USER> (remhash 'color ht)
T
哈希表有一个迭代函数:maphash ,它接受一个两个参数的函数及一个哈希表。函数会被每个键值对调用,没有特定的顺序:
>(setf (gethash 'shapeht) 'spherical
(gethash 'sizeht) 'giant)
GIANT
>(maphash #' (lambda (k v)
(formatt "~A=~A~%" k v))
ht)
SHAPE=SPHERICAL
SIZE=GIANT
COLOR=RED
NIL