A thanks to Ray who has helped.

Here's the workaround:

(defun put-char (my-stream my-char)
  "Put a character on the given stream."
  (if (eq my-stream t)
    (write-char my-char *standard-output*)
    (write-char my-char my-stream)))

(defun put-string (my-stream my-string)
  "Put a string on the given stream."
  (if (eq my-stream t)
    (write-string my-string *standard-output*)
    (write-string my-string my-stream)))

== Steven

On Sep 13, 2008, at 1:40 PM, Raymond Toy wrote:

Steven Edwards wrote:
Banner:

CMU Common Lisp 19e (19E), running on gail
With core: /Users/sje/cmucl-19e-x86-darwin/lib/cmucl/lib/lisp.core
Dumped on: Thu, 2008-05-01 20:38:02-04:00 on macmini
See <http://www.cons.org/cmucl/> for support information.
Loaded subsystems:
  Python 1.1, target Intel x86
  CLOS based on Gerd's PCL 2004/04/14 03:32:47


Three related bugs:

(defun bug0 (my-stream)
(write-char #\1 my-stream)
(format my-stream "~D" 2)
(write-char #\3 my-stream))

Let's see. CLHS says for write-char, T means *terminal-io*. And T for format means *standard-output*. Hence, write-char and format send their
output to different places.  On cmucl,  *standard-output* and
*terminal-io* are different streams.  Looking at the stream objects,
they go to different Unix file descriptors, and the file descriptors are
different.

For all the tests you provide, if you specify *standard-output*, you get
the results you want.  I guess gcl and clisp have *terminal-io* and
*standard-output* being essentially the same stream.


Reply via email to