Warning: This is the manual of the legacy Guile 2.2 series. You may want to read the manual of the current stable series instead.

Next: , Previous: , Up: Read/Load/Eval/Compile   [Contents][Index]


6.18.2 Reading Scheme Code

Scheme Procedure: read [port]
C Function: scm_read (port)

Read an s-expression from the input port port, or from the current input port if port is not specified. Any whitespace before the next token is discarded.

The behaviour of Guileā€™s Scheme reader can be modified by manipulating its read options.

Scheme Procedure: read-options [setting]

Display the current settings of the global read options. If setting is omitted, only a short form of the current read options is printed. Otherwise if setting is the symbol help, a complete options description is displayed.

The set of available options, and their default values, may be had by invoking read-options at the prompt.

scheme@(guile-user)> (read-options)
(square-brackets keywords #f positions)
scheme@(guile-user)> (read-options 'help)
copy              no    Copy source code expressions.
positions         yes   Record positions of source code expressions.
case-insensitive  no    Convert symbols to lower case.
keywords          #f    Style of keyword recognition: #f, 'prefix or 'postfix.
r6rs-hex-escapes  no    Use R6RS variable-length character and string hex escapes.
square-brackets   yes   Treat `[' and `]' as parentheses, for R6RS compatibility.
hungry-eol-escapes no   In strings, consume leading whitespace after an
                        escaped end-of-line.
curly-infix       no    Support SRFI-105 curly infix expressions.
r7rs-symbols      no    Support R7RS |...| symbol notation.

Note that Guile also includes a preliminary mechanism for setting read options on a per-port basis. For instance, the case-insensitive read option is set (or unset) on the port when the reader encounters the #!fold-case or #!no-fold-case reader directives. Similarly, the #!curly-infix reader directive sets the curly-infix read option on the port, and #!curly-infix-and-bracket-lists sets curly-infix and unsets square-brackets on the port (see SRFI-105). There is currently no other way to access or set the per-port read options.

The boolean options may be toggled with read-enable and read-disable. The non-boolean keywords option must be set using read-set!.

Scheme Procedure: read-enable option-name
Scheme Procedure: read-disable option-name
Scheme Syntax: read-set! option-name value

Modify the read options. read-enable should be used with boolean options and switches them on, read-disable switches them off.

read-set! can be used to set an option to a specific value. Due to historical oddities, it is a macro that expects an unquoted option name.

For example, to make read fold all symbols to their lower case (perhaps for compatibility with older Scheme code), you can enter:

(read-enable 'case-insensitive)

For more information on the effect of the r6rs-hex-escapes and hungry-eol-escapes options, see (see String Syntax).

For more information on the r7rs-symbols option, see (see Symbol Read Syntax).


Next: , Previous: , Up: Read/Load/Eval/Compile   [Contents][Index]