Incompatibilities with the R7RS
As the R7RS is a much less ambitious standard than the R6RS (see Guile and Scheme), it is very easy for Guile to support. As such, Guile is a fully conforming implementation of R7RS, with the exception of the occasional bug and a couple of unimplemented features:
- The R7RS specifies a syntax for reading circular data structures using datum labels, such as
#0=(1 2 3 . #0#). Guile’s reader does not support this syntax currently; https://bugs.gnu.org/38236. - As with R6RS, a number of lexical features of R7RS conflict with Guile’s historical syntax. In addition to
r6rs-hex-escapesandhungry-eol-escapes(see Incompatibilities with the R6RS), ther7rs-symbolsreader feature needs to be explicitly enabled.
Guile exposes a procedure in the root module to choose R7RS defaults over Guile’s historical defaults.
Scheme Procedure: install-r7rs!
Alter Guile’s default settings to better conform to the R7RS.
While Guile’s defaults may evolve over time, the current changes that this procedure imposes are to add .sls and .guile.sls to the set of supported %load-extensions, to better support R7RS conventions. See Load Paths. install-r7rs! will also enable the reader options mentioned above.
Finally, note that the --r7rs command-line argument will call install-r7rs! before calling user code. R7RS users probably want to pass this argument to their Guile.