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

Mat*_*teo 3 hashtable common-lisp

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

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

Syl*_*ter 7

您想知道如何使用哈希表对序列执行各种操作.

您可以使用循环宏迭代每个值,并使用它: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
Run Code Online (Sandbox Code Playgroud)

您可能希望查看Common Lisp Cookbok的哈希表页面以获取更多提示.