我是普通lisp的新手。在我的案例中,是否有一个CL库来打印集合,嵌套哈希表?
答案 0 :(得分:3)
首先,CL没有“集合”类型。
其次,如果将*print-array*
设置为t
,一些(大多数?)CL实现将打印包含内容的哈希表。
第三,如果你的CL实现没有这样做,你可以根据hash-table->alist
轻松鞭打自己的。
答案 1 :(得分:3)
如果您考虑自己编写,请使用print-object作为起点。它不是独立实现的,但至少在LispWorks和SBCL中起作用。
(defmethod print-object ((object hash-table) stream)
(format stream "#HASH{~{~{(~a : ~a)~}~^ ~}}"
(loop for key being the hash-keys of object
using (hash-value value)
collect (list key value))))
答案 2 :(得分:1)
使用Rutils库:
如果我们使用(toggle-print-hash-table)
启用漂亮的哈希表打印,则它们的打印方式如下:
rutils-user> #h(:foo 42)
#{
:FOO 42
}
它在引擎盖下使用print-object
,因此它的警告适用(不是标准的,但在诸如SBCL的某些实现中有效)。
#h
阅读器宏是创建哈希表的快捷方式。