Gauche conforms “Revised^7 Report of Algorithmic Language Scheme,” (R7RS) including optional syntax and procedures. We cover R7RS small language (see R7RS small language), as well as part of R7RS large libraries (see R7RS large).
:key
), but behaves as if it is automatically bound to
itself. See Keywords, for the details.
Keywords are used extensively when
passing so-called keyword arguments (see Making procedures).
Note that, since Gauche predates R7RS, most existing Gauche source code doesn’t follow the R7RS program/library structure. Gauche can read both traditional Gauche modules/scripts and R7RS programs/libraries seamlessly. See Library modules - R7RS standard libraries, for the details of how R7RS is integrated into Gauche.
Gauche also supports the following SRFIs (Scheme Request for Implementation).
This has become a part of R7RS small. Gauche supports this as Built-in. See Feature conditional.
This has become a part of R7RS large. See scheme.list
- R7RS lists.
(Some of SRFI-1 procedures are built-in).
Supported natively. See Binding constructs.
The module gauche.uvector
provides a superset of
srfi.4
procedures, including arithmetic operations and
generic interface on the SRFI-4 vectors. See Uniform vectors.
Supported by the module srfi.5
.
See srfi.5
- A compatible let form with signatures and rest arguments.
This has become a part of R7RS small. Gauche supports this as built-in. See String ports.
Supported as an autoloaded macro.
See srfi.7
- Feature-based program configuration language.
Syntax receive
is built-in. See Binding constructs.
Supported by the module gauche.record
. See gauche.record
- Record types.
Built-in. See Read-time constructor.
This has become a part of R7RS small. Gauche supports it as built-in. See Binding constructs.
Supported by the module srfi.13
. See srfi.13
- String library.
(Some of SRFI-13 procedures are built-in).
This has become a part of R7RS large.
Character-set object and a few procedures are built-in.
See Character Sets.
Complete set of SRFI-14 is supported by the module scheme.charset
.
See scheme.charset
- R7RS character sets.
This has become a part of R7RS small. Built-in. See Making procedures.
Built-in. See Assignments.
Some SRFI-18 features are built-in, and the rest is in gauche.threads
module. See gauche.threads
- Threads.
Time data type is Gauche built-in (see Time).
Complete set of SRFI-19 is supported by the module srfi.19
.
See srfi.19
- Time data types and procedures.
Supported. See Writing Scheme scripts.
This has become a part of R7RS small. Built-in. See Signaling exceptions.
Supported by the module gauche.array
, which defines
superset of SRFI-25. See gauche.array
- Arrays.
Built-in. See Making procedures.
Supported by the module srfi.27
. See srfi.27
- Sources of Random Bits.
Gauche’s built-in format
procedure is a superset of
SRFI-28 format
. See Output.
Supported by the module srfi.29
.
See srfi.29
- Localization.
This has become a part of R7RS small. Supported by the native reader. See Lexical structure.
See Binding constructs.
This has become a part of R7RS small. Built-in. See Exceptions.
Built-in. See Conditions.
Partly supported. See Conditions.
Supported by the module srfi.37
.
See srfi.37
- args-fold: a program argument processor.
Built-in. See Reading data and Output.
This has become a part of R7RS small. Built-in (see Parameters).
Supported by the module util.stream
.
See util.stream
- Stream library.
This has become a part of R7RS large. See scheme.stream
- R7RS stream.
Most of stream procedures are also in util.stream
(see util.stream
- Stream library).
Supported by the module srfi.42
.
See srfi.42
- Eager comprehensions.
Supported by the module srfi.43
.
See srfi.43
- Vector library (legacy).
Note that this srfi is superseded by R7RS scheme.vector
library (formerly known as srfi.133
). See scheme.vector
- R7RS vectors.
Built-in. See Lazy evaluation.
This has become a part of R7RS small. Built-in. See Hygienic macros.
Supported as an autoloaded macro.
See srfi.55
- Requiring extensions.
Most procedures are built-in: See scheme.bitwise
- R7RS bitwise operations.
The complete support is in srfi.60
module: See srfi.60
- Integers as bits.
cond
clauseSupported natively. See Conditionals.
This has become a part of R7RS small. Supported by the native reader. See Lexical structure.
Supported by the module srfi.64
. See srfi.64
- A Scheme API for test suites.
Supported by the module srfi.66
(see srfi.66
- Octet vectors).
This is mostly a subset of gauche.uvector
, but has one
slight difference.
Supported by the module srfi.69
(see srfi.69
- Basic hash tables).
Note that this srfi is superseded by R7RS scheme.hash-table
library (formerly known as srfi.125
).
See scheme.hash-table
- R7RS hash tables.
Supported by the module srfi.74
(see srfi.74
- Octet-addressed binary blocks).
Supported by the module srfi.78
.
It can work with gauche.test
. See srfi.78
- Lightweight testing.
=>
in case clausesThis has become a part of R7RS small. Supported natively. See Conditionals.
Supported natively. See Sorting and merging.
This srfi is not exactly a library, but
rather a description of features the platform should provide
to support SLIB. In order to load this module, SLIB must be
already installed. See slib
- SLIB interface, for the details.
Supported by the module srfi.98
. See srfi.98
- Accessing environment variables.
Supported by the module gauche.record
. See gauche.record
- Record types.
This has become a part of R7RS large.
Supported by the module scheme.rlist
(see scheme.rlist
- R7RS random-access lists).
Supported by the module srfi.106
. See srfi.106
- Basic socket interface.
This has become a part of R7RS large as scheme.box
.
Gauche has it as built-in. See Boxes.
Supported by the module srfi.112
.
See srfi.112
- Environment inquiry.
This has become a part of R7RS large.
Supported by the module scheme.set
. See scheme.set
- R7RS sets.
Some of the features are built-in (see Basic comparators). Full srfi spec is supported by the module srfi.114
(see srfi.114
- Comparators).
This has become a part of R7RS large.
Supported by the module scheme.regex
. See scheme.regex
- R7RS regular expressions.
This has become a part of R7RS large.
Immutable pairs are supported natively (see Mutable and immutable pairs).
Full set of APIs are available
in the module scheme.ilist
(see scheme.ilist
- R7RS immutable lists).
This has become a part of R7RS large.
Supported by the module scheme.list-queue
, which is implemented on top
of data.queue
.
(see scheme.list-queue
- R7RS list queues)
Supported by the module srfi.118
.
(see srfi.118
- Simple adjustable-size strings)
Supported by the module srfi.120
(see srfi.120
- Timer APIs).
It is a wrapper of control.scheduler
(see control.scheduler
- Scheduler).
This has become a part of R7RS large.
Gauche’s gauche.generator
is superset of srfi-121
(see gauche.generator
- Generators).
This has become a part of R7RS large.
Supported by scheme.ephemeron
.
Note: Current Gauche’s implementation isn’t optimal.
See scheme.ephemeron
- R7RS ephemeron.
This has become a part of R7RS large.
Supported by scheme.hash-table
(see scheme.hash-table
- R7RS hash tables).
Note that Gauche’s native interface provides the same functionalities, but
under slightly different names for the backward compatibility.
See Hashtables.
This has become a part of R7RS large.
Supported by scheme.lseq
(see scheme.lseq
- R7RS lazy sequences).
This has become a part of R7RS large. Built-in. See Basic comparators, for the details.
The procedures char-title-case?
and char-titlecase
are
built-in, and string-titlecase
is in gauche.unicode
.
For the compatibility, you can (use srfi.129)
or
(import (srfi 129))
to get these three procedures.
String cursors are supported natively (see String cursors).
Most of built-in and srfi-13 string procedures accept cursors in addition
to indexes. The module srfi-130 provides several procedures that
has the same name as srfi-13 but returns a string cursor instead
of an index (see srfi.130
- Cursor-based string library).
This srfi is a pure subset of srfi-99, and gauche.record
’s
define-record-type
covers it. See gauche.record
- Record types.
This has become a part of R7RS large.
Supported by the module scheme.sort
.
See scheme.sort
- R7RS sort.
This has become a part of R7RS large.
Supported by the module scheme.vector
. See scheme.vector
- R7RS vectors.
This has become a part of R7RS large.
The module data.ideque
is compatible to srfi-134.
See data.ideque
- Immutable deques.
This has become a part of R7RS large.
In Gauche, the text type is not disjoint from the string type. Instead,
a text is simply an immutable and indexed string.
See String indexing, for the detail of indexed string.
The API is described in scheme.text
- R7RS immutable texts.
Supported, except honoring COMPILE_R7RS
environment variable.
See gauche-compile-r7rs
- Compile scripts, for the details.
Built-in. See Syntax parameters.
This has become a part of R7RS large.
Supported by the module scheme.division
. See scheme.division
- R7RS integer division.
This has become a part of R7RS large.
Supported by the module scheme.fixnum
. See scheme.fixnum
- R7RS fixnums.
This has become a part of R7RS large.
Supported by the module scheme.flonum
. See scheme.flonum
- R7RS flonum.
Built-in. See Conditionals.
This has become a part of R7RS large.
Supported by the module scheme.mapping
.
See scheme.mapping
- R7RS mappings.
The built-in syntax-rules
support srfi.149
.
Supported by the module srfi.151
(see scheme.bitwise
- R7RS bitwise operations).
Note that many equivalent procedures are provided built-in
(see Basic bitwise operations).
Supported by the module srfi.152
(see srfi.152
- String library (reduced)).
Suppored by the module srfi.154
. (see srfi.154
- First-class dynamic extents).
This has become a part of R7RS large.
Supported by the module scheme.generator
(see scheme.generator
- R7RS generators).
Note that most of generator procedures are supported by gauche.generator
(see gauche.generator
- Generators).
This has become a part of R7RS large. See scheme.show
- R7RS combinator formatting.
This has become a part of R7RS large,
supported by the module scheme.vector.@
where
@
is one of base
,
u8
, s8
, u16
, s16
,
u32
, s32
, u64
, s64
, f32
, f64
,
c64
, or c128
(see scheme.vector.@
- R7RS uniform vectors).
Supported by the module srfi.162
. See srfi.162
- Comparator sublibrary.
Supported by the built-in reader. See Lexical structure.
Supported by the module srfi.170
. See srfi.170
- POSIX API.
Supported by the modules srfi.172
and srfi.172.functional
.
See srfi.172
- Two safer subsets of R7RS.
Supported by the module srfi.173
(see srfi.173
- Hooks (srfi)),
which is a thin layer on top of gauche.hook
(see gauche.hook
- Hooks)
Supported by the module srfi.174
(see srfi.174
- POSIX timespecs).
In Gauche, the timespec type is the same as built-in <time>
object, which is also the same as srfi-19 time.
Supported by the module srfi.175
(see srfi.175
- ASCII character library).
Supported as a command-line flag of gosh
.
The version-alist
procedure is built-in.
The basic support is built-in (see Bitvectors).
Complete support is in the module srfi.178
(see srfi.178
- Bitvector library.
Supported by the module srfi.180
(see srfi.180
- JSON).
Note that Gauche also has rfc.json
,
and srfi.180
is implemented on top of it.
Supported by the module srfi.181
(see srfi.181
- Custom ports).
Gauche has an original custom port mechanism (see gauche.vport
- Virtual ports), and
This srfi is built in top of it.
Supported by the module srfi.185
.
See srfi.185
- Linear adjustable-length strings.
Supported by the module srfi.189
.
See srfi.189
- Maybe and Either: optional container types.
Supported by the module srfi.190
.
See srfi.190
- Coroutine generators.
Gauche’s port already has positining mechanism, so main procedures
are built-in (see Common port operations).
A few additional procedures are provided by the module srfi.192
(see srfi.192
- Port positioning).
Two procedures, command-line
and script-file
, are
built-in. Other APIs are provided by the module srfi.193
(see srfi.193
- Command line).
Supported by the module srfi.194
(see srfi.194
- Random data generators (SRFI)),
which is based on data.random
(see data.random
- Random data generators).
Built-in. See Boxes.
Suppored by the module srfi.196
. Also the data.range
module is the superset of this srfi (see data.range
- Range).
Supported by the module srfi.197
(see srfi.197
- Pipeline operators).
Bytestring literals are supported by the core. Bytestring procedures
are available in the module srfi.207
(see srfi.207
- String-notated bytevectors).
Supported by the module srfi.209
(see srfi.209
- Enums and enum sets).
Supported by the module srfi.210
(see srfi.210
- Procedures and syntax for multiple values).
Supported by the module srfi.215
(see srfi.215
- Central log exchange).
Supporetd by the module srfi.216
(see srfi.216
- SICP prerequisites).
Supported by the module srfi.217
(see srfi.217
- Integer sets).
Gauche’s built-in define
(both R7RS-compatible one and
extended one) supports this feature.
If you import srfi-219 explicitly, it imports null#define
.
See srfi.219
- Define higher-order lambda, for the details.
Supported by the module srfi.221
(see srfi.221
- Generator/accumulator sub-library).
Supported by the module srfi.222
(see srfi.222
- Compound objects).
Partially supported as built-in and gauche.threads
module.
See srfi.226
- Control features for the details.
Supported by the module srfi.227
(see srfi.227
- Optional arguments).
Supported by the module srfi.228
(see srfi.228
- Composing comparators).
Supported by the module srfi.229
(see srfi.229
- Tagged procedures).
Supported by the module srfi.230
(see srfi.230
- Atomic operations).
Supported by the module srfi.232
(see srfi.232
- Flexible curried procedures).
Supported by the module srfi.234
(see srfi.234
- Topological sorting).
Supported by the module srfi.235
(see srfi.235
- Combinators (SRFI)).
Built-in. See Grouping.
Supported by the mdoule srfi.238
(see srfi.238
- Codesets).
Supported by the module srfi.239
(see srfi.239
- Destructuring lists).
Built-in. See Definitions.
Supported by the module srfi.247
(see srfi.247
- Syntactic monads).
Supported by the module srfi.252
(see srfi.252
- Property testing.