|
ANSI Common Lisp 21 Streams 21.2 Dictionary of Streams
21.2.53 *debug-io*, *error-output*, *query-io*, *standard-input*, *standard-output*, *trace-output* |
Variable |
- Value Type:
-
For *standard-input*:
an input stream
For *error-output*, *standard-output*, and *trace-output*:
an output stream.
For *debug-io*, *query-io*:
a bidirectional stream.
- Initial Value:
-
implementation-dependent, but
it must be an open stream
that is not a generalized synonym stream
to an I/O customization variables
but that might be a generalized synonym stream to
the value of some I/O customization variable.
The initial value might also be a generalized synonym stream
to either the symbol *terminal-io* or to the stream
that is its value.
- Description:
-
These variables are collectively called the
standardized I/O customization variables.
They can be bound or assigned in order to
change the default destinations for input and/or output
used by various standardized operators and facilities.
The value of *debug-io*, called debug I/O,
is a stream to be used for interactive debugging purposes.
The value of *error-output*, called error output,
is a stream to which warnings and non-interactive error messages should be sent.
The value of *query-io*, called query I/O,
is a bidirectional stream
to be used when asking questions of the user. The question should be output
to this stream, and the answer read from it.
The value of *standard-input*, called standard input,
is a stream that is used by many operators
as a default source of input when no specific input stream
is explicitly supplied.
The value of *standard-output*, called standard output,
is a stream that is used by many operators
as a default destination for output when no specific output stream
is explicitly supplied.
The value of *trace-output*, called trace output,
is the stream on which traced functions (see trace)
and the time macro print their output.
- Examples:
-
(with-output-to-string (*error-output*)
(warn "this string is sent to *error-output*"))
"Warning: this string is sent to *error-output*
" ;The exact format of this string is implementation-dependent.
(with-input-from-string (*standard-input* "1001")
(+ 990 (read))) 1991
(progn (setq out (with-output-to-string (*standard-output*)
(print "print and format t send things to")
(format t "*standard-output* now going to a string")))
:done)
:DONE
out
"
\"print and format t send things to\" *standard-output* now going to a string"
(defun fact (n) (if (< n 2) 1 (* n (fact (- n 1)))))
FACT
(trace fact)
(FACT)
;; Of course, the format of traced output is implementation-dependent.
(with-output-to-string (*trace-output*)
(fact 3))
"
1 Enter FACT 3
| 2 Enter FACT 2
| 3 Enter FACT 1
| 3 Exit FACT 1
| 2 Exit FACT 2
1 Exit FACT 6"
- See Also:
-
*terminal-io*,
synonym-stream,
time,
trace,
Chapter 9 Conditions,
Chapter 23 Reader,
Chapter 22 Printer
- Notes:
-
The intent of the constraints on the initial value
of the I/O customization variables is to ensure that it
is always safe to bind or assign such a variable to
the value of another I/O customization variable, without
unduly restricting implementation flexibility.
It is common for an implementation to make
the initial values of *debug-io* and *query-io*
be the same stream,
and to make
the initial values of *error-output* and *standard-output*
be the same stream.
The functions y-or-n-p and yes-or-no-p use query I/O
for their input and output.
In the normal Lisp read-eval-print loop,
input is read from standard input.
Many input functions, including read and read-char,
take a stream argument that defaults to standard input.
In the normal Lisp read-eval-print loop, output is sent to standard output.
Many output functions, including print and write-char,
take a stream argument that defaults to standard output.
A program that wants, for example, to divert output to a file should do so by
binding *standard-output*; that way error messages sent to
*error-output* can still get to the user by going through
*terminal-io* (if *error-output* is bound to *terminal-io*),
which is usually what is desired.
- Allegro CL Implementation Details:
-
None.
|