I am new to common lisp. Is there a CL library to pretty print collections, in my case, nested hash tables?
If you considering writing it yourself, here is a starting point using print-object. It is not implementation independent, 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))))
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
.
alexandria:hash-table-alist
exists. –
Cnidus *print-array*
to t
, SBCL only shows #<HASH-TABLE :TEST EQL :COUNT 1 {100342D7F3}>
. It is not pretty-printed with content. –
Evalynevan With the Serapeum library, we can use the dict
constructor and enable pretty-printing with (toggle-pretty-print-hash-table)
:
(dict :a 1 :b 2 :c 3)
;; =>
(dict
:A 1
:B 2
:C 3
)
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.
© 2022 - 2024 — McMap. All rights reserved.