我有一个哈希表
(setf ht (make-hash-table))
其中包含一些条目,例如(setf (gethash 'first ht) 'first-value)
,(setf (gethash 'second ht) 'second-value)
,...
此外,我有一个评估为test
或T
的arity谓词NIL
。我想检查哈希表ht
的所有第一个条目是否满足test
谓词。例如,如果哈希表仅包含上面给出的两个条目,我想知道(and (test 'first) (test 'second))
的评估。有一个简单的方法吗?
答案 0 :(得分:7)
您想知道如何使用哈希表执行every对序列的处理。
您可以使用loop宏来迭代每个值,并使用:always
检查测试的每个元素。与every
:always
一样,当测试为NIL
时,会立即终止循环。
(defun hash-every (test hash)
(loop :for value :being :the :hash-values :in hash
:always (funcall test value)))
(hash-every #'numberp ht) ; ==> NIL
(hash-every #'symbolp ht) ; ==> T
您可能希望查看Common Lisp Cookbok's hash table page以获取更多提示。