Subject: Re: Readable hash tables
From: Erik Naggum <>
Date: 2000/06/14
Newsgroups: comp.lang.lisp
Message-ID: <>

* Ivar Rummelhoff <>
| I'm so sorry.
|  (let ((dispatch
|         (let ((tab (copy-pprint-dispatch nil)))
|           (set-pprint-dispatch 'hash-table #'hash-print 0 tab)
|           tab)))
|    (defun mi-write (obj &rest args)
|      (let ((*print-pprint-dispatch* dispatch))
|        (setf (getf args :pretty) t)
|        (apply #'write obj args))))
| should replace the erroneous function by the same name in my previous
| posting.

  Although not strictly erroneous, you don't really know whether the
  argument list is modifiable and safe to modify.  I highly recommend

(apply #'write obj :pretty t args)

  as only the first occurrence of a keyword argument is used and any
  redundancy is just ignored.

| Alas, this the new version insists on printing pretty...

  Well, you _could_ empty the pprint-dispatch if *print-pretty* is nil
  upon entry to the function.  An empty *pprint-dispatch* is returned
  from excl::make-pprint-dispatch without arguments in Allegro CL.

  If this is not what you expected, please alter your expectations.