如何检查哈希表中的每个值是否满足Common Lisp中的谓词

时间:2015-01-17 15:36:10

标签: common-lisp hashtable

我有一个哈希表 (setf ht (make-hash-table)) 其中包含一些条目,例如(setf (gethash 'first ht) 'first-value)(setf (gethash 'second ht) 'second-value),...

此外,我有一个评估为testT的arity谓词NIL。我想检查哈希表ht的所有第一个条目是否满足test谓词。例如,如果哈希表仅包含上面给出的两个条目,我想知道(and (test 'first) (test 'second))的评估。有一个简单的方法吗?

1 个答案:

答案 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以获取更多提示。