ccl
ccl copied to clipboard
Pprinter doesn't work as expected
Consider this example:
(pprint-tabular *standard-output* (make-list 100 :initial-element "abcdefg"))
("abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg"
"abcdefg" "abcdefg" "abcdefg" "abcdefg")
This looks correct.
But take the pprint-tabular example from http://www.lispworks.com/documentation/HyperSpec/Body/f_ppr_fi.htm:
(defun my-pprint-tabular (s list &optional (colon-p t) at-sign-p (tabsize nil))
(declare (ignore at-sign-p))
(when (null tabsize) (setq tabsize 16))
(pprint-logical-block (s list :prefix (if colon-p "(" "")
:suffix (if colon-p ")" ""))
(pprint-exit-if-list-exhausted)
(loop (write (pprint-pop) :stream s)
(pprint-exit-if-list-exhausted)
(write-char #\Space s)
(pprint-tab :section-relative 0 tabsize s)
(pprint-newline :fill s))))
(my-pprint-tabular *standard-output* (make-list 100 :initial-element "abcdefg"))
("abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg" "abcdefg")
Note that the output is all on one line. This differs from what pprint-tabular does. I also tried this with clisp and cmucl. While the spacing between words is not the same as here, my-pprint-tabular does wrap lines as expected instead of printing it all on one giant line.
The pprint-vector example from http://www.lispworks.com/documentation/HyperSpec/Body/22_bb.htm has the same problem. The entire vector is always printed on one line instead of wrapping it.
Maybe I'm missing something and the line width is somehow infinity. But then why does the built-in pprint-tabular wrap lines appropriately?