Mat*_*teo 3 hashtable common-lisp
我有一个哈希表
(setf ht (make-hash-table))
里面包含了一些项目,例如(setf (gethash 'first ht) 'first-value),(setf (gethash 'second ht) 'second-value),...
此外,我有一个testarity 的谓词,评估为T或NIL.我想检查哈希表的所有第一个条目是否ht满足test谓词.例如,如果哈希表只包含上面给出的两个条目,我想知道它的评估(and (test 'first) (test 'second)).有一个简单的方法吗?
您想知道如何使用哈希表对序列执行各种操作.
您可以使用循环宏迭代每个值,并使用它: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的哈希表页面以获取更多提示.