12.5 Writing
Writes
datum to
out, normally in such a way that
instances of core datatypes can be read back in. If
out has a
handler associated to it via
port-write-handler, then the
handler is called. Otherwise, the default printer is used (in
write mode), as configured by various parameters.
See The Printer for more information about the default
printer. In particular, note that write may require memory
proportional to the depth of the value being printed, due to the
initial cycle check.
Displays
datum to
out, similar to
write,
but usually in such a way that byte- and character-based datatypes are
written as raw bytes or characters. If
out has a handler
associated to it via
port-display-handler, then the handler
is called. Otherwise, the default printer is used (in
display
mode), as configured by various parameters.
See The Printer for more information about the default
printer. In particular, note that display may require memory
proportional to the depth of the value being printed, due to the
initial cycle check.
Writes
datum to
out, normally the same way as
write. If
out has a handler associated to it via
port-print-handler, then the handler is called. Otherwise,
the handler specified by
global-port-print-handler is called;
the default handler uses the default printer in
write mode.
The optional quote-depth argument adjusts printing when the
print-as-expression parameter is set to #t. In that
case, quote-depth specifies the starting quote depth for
printing datum.
The rationale for providing print is that display
and write both have specific output conventions, and those
conventions restrict the ways that an environment can change the
behavior of display and write procedures. No output
conventions should be assumed for print, so that environments
are free to modify the actual output generated by print in
any way.
The same as
(display datum out) followed by
(newline out),
which is similar to
println in Pascal or Java.
Prints formatted output to out, where form is a string
that is printed directly, except for special formatting
escapes:
~n or ~% prints a newline character (which
is equivalent to \n in a literal format string)
~a or ~A displays the next argument
among the vs
~s or ~S writes the next argument
among the vs
~v or ~V prints the next argument
among the vs
~.‹c› where ‹c› is a,
A, s, S, v, or V:
truncates display, write, or print output
to (error-print-width) characters, using ... as
the last three characters if the untruncated output would be longer
~e or ~E outputs the next argument among the
vs using the current error value conversion handler (see
error-value->string-handler) and current error printing
width
~c or ~C write-chars the
next argument in vs; if the next argument is not a
character, the exn:fail:contract exception is raised
~b or ~B prints the next argument among the
vs in binary; if the next argument is not an exact number, the
exn:fail:contract exception is raised
~o or ~O prints the next argument among the
vs in octal; if the next argument is not an exact number, the
exn:fail:contract exception is raised
~x or ~X prints the next argument among the
vs in hexadecimal; if the next argument is not an exact
number, the exn:fail:contract exception is raised
~~ prints a tilde.
~‹w›, where ‹w› is a whitespace
character (see char-whitespace?), skips characters in
form until a non-whitespace character is encountered or
until a second end-of-line is encountered (whichever happens
first). On all platforms, an end-of-line can be #\return,
#\newline, or #\return followed immediately by
#\newline.
The form string must not contain any ~ that is
not one of the above escapes, otherwise the
exn:fail:contract exception is raised. When the format string requires more
vs than are supplied, the
exn:fail:contract exception is raised. Similarly, when more vs are
supplied than are used by the format string, the
exn:fail:contract exception is raised.
Example: |
| (3 4) as a string is "(3 4)". |
|
Formats to a string. The result is the same as
Example: |
> (format "~a as a string is ~s.\n" '(3 4) "(3 4)") | "(3 4) as a string is \"(3 4)\".\n" |
|
A parameter that controls pair printing. If the value is true, then
pairs print using { and } instead of
( and ). The default is #f.
A parameter that controls pair printing. If the value is true, then
mutable pairs print using { and } instead of
( and ). The default is #t.
A parameter that enables or disables printing of values that have no
readable form (using the default reader), including
structures that have a custom-write procedure (see
prop:custom-write), but not including
uninterned
symbols and
unreadable symbols (which print the same as
interned symbols). If the parameter value is
#f, an
attempt to print an unreadable value raises
exn:fail. The
parameter value defaults to
#t. See
The Printer for
more information.
A parameter that controls printing data with sharing; defaults to
#f. See
The Printer for more information.
A parameter that controls printing structure values in vector or
prefab form; defaults to
#t. See
The Printer
for more information. This parameter has no effect on the printing of
structures that have a custom-write procedure (see
prop:custom-write).
A parameter that controls printing box values; defaults to
#t. See
Printing Boxes for more information.
A parameter that controls printing vectors; defaults to
#f. See
Printing Vectors for more information.
A parameter that controls printing hash tables; defaults to
#f. See
Printing Hash Tables for more information.
A parameter that controls printing of booleans. When the parameter’s
value is true, #t and #f print as #true
and #false, otherwise they print as #t
and #f. The default is #f.
A parameter that controls printing of two-element lists that start
with
quote,
'quasiquote,
'unquote,
'unquote-splicing,
'syntax,
'quasisyntax,
'unsyntax, or
'unsyntax-splicing; defaults to
#f. See
Printing Pairs and Lists for more information.
A parameter that controls printing of
syntax objects. Up to
width characters are used to show the datum form of a syntax
object within
#<syntax...
> (after the
syntax object’s source location, if any).
A parameter that is used when writing compiled code (see
Printing Compiled Code) that contains
pathname literals, including source-location pathnames for procedure
names. When not
#f, paths that syntactically extend the
parameter’s value are converted to relative paths; when the resulting
compiled code is read, relative paths are converted back to complete
paths using the
current-load-relative-directory parameter (if
it is not
#f; otherwise, the path is left relative).
Gets or sets the
port write handler,
port display
handler, or
port print handler for
out. This
handler is called to output to the port when
write,
display, or
print (respectively) is applied to the
port. Each handler must accept two arguments: the value to be printed and
the destination port. The handler’s return value is ignored.
A port print handler optionally accepts a third argument, which
corresponds to the optional third argument to print; if a
procedure given to port-print-handler does not accept a third
argument, it is wrapped with a procedure that discards the optional
third argument.
The default port display and write handlers print Racket expressions
with Racket’s built-in printer (see The Printer). The
default print handler calls the global port print handler (the value
of the global-port-print-handler parameter); the default
global port print handler is the same as the default write handler.
A parameter that determines
global port print handler,
which is called by the default port print handler (see
port-print-handler) to
print values into a port.
The default value uses the built-in printer (see
The Printer) in
print mode.
A global port print handler optionally accepts a third
argument, which corresponds to the optional third argument to
print. If a procedure given to
global-port-print-handler does not accept a third argument,
it is wrapped with a procedure that discards the optional third
argument.