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