Common Lisp Library for Pretty Printing? e.g. pretty print a nested hash table

前端 未结 3 1475
终归单人心
终归单人心 2021-01-18 07:27

I am new to common lisp. Is there a CL library to pretty print collections, in my case, nested hash tables?

相关标签:
3条回答
  • 2021-01-18 07:44

    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.

    0 讨论(0)
  • 2021-01-18 07:49

    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.

    0 讨论(0)
  • 2021-01-18 08:02

    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))))
    
    0 讨论(0)
提交回复
热议问题