I am new to common lisp. Is there a CL library to pretty print collections, in my case, nested hash tables?
With the Rutils library:
if we enable pretty printing of hash-tables with (toggle-print-hash-table)
, they are printed like so:
rutils-user> #h(:foo 42)
#{
:FOO 42
}
It uses print-object
under the hood, so its warning applies (not standard, but works in some implementations like SBCL).
The #h
reader macro is a shortcut to create hash-tables.
First, CL does not have a "collection" type.
Second, some (most?) CL implementations will print hash tables with content if you set *print-array* to t
.
Third, if your CL implementation does not do that, you can easily whip up your own, based on, say, hash-table->alist.
If you consider writing it yourself here is a starting point using print-object. It is not implementation independend, but this works at least in LispWorks and 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))))