The first description of Scheme was written in 1975 [Scheme75]. A revised report [Scheme78] appeared in 1978, which described the evolution of the language as its MIT implementation was upgraded to support an innovative compiler [Rabbit]. Three distinct projects began in 1981 and 1982 to use variants of Scheme for courses at MIT, Yale, and Indiana University [Rees82], [MITScheme], [Scheme311]. An introductory computer science textbook using Scheme was published in 1984 [SICP].
As Scheme became more widespread, local dialects began to diverge until students and researchers occasionally found it difficult to understand code written at other sites. Fifteen representatives of the major implementations of Scheme therefore met in October 1984 to work toward a better and more widely accepted standard for Scheme. Their report, the RRRS [RRRS], was published at MIT and Indiana University in the summer of 1985. Further revision took place in the spring of 1986, resulting in the R3RS [R3RS]. Work in the spring of 1988 resulted in R4RS [R4RS], which became the basis for the IEEE Standard for the Scheme Programming Language in 1991 [IEEEScheme]. In 1998, several additions to the IEEE standard, including high-level hygienic macros, multiple return values, and
eval
, were finalized as the R5RS [R5RS].In the fall of 2006, work began on a more ambitious standard, including many new improvements and stricter requirements made in the interest of improved portability. The resulting standard, the R6RS, was completed in August 2007 [R6RS], and was organized as a core language and set of mandatory standard libraries. Several new implementations of Scheme conforming to it were created. However, most existing R5RS implementations (even excluding those which are essentially unmaintained) did not adopt R6RS, or adopted only selected parts of it.
In consequence, the Scheme Steering Committee decided in August 2009 to divide the standard into two separate but compatible languages --- a "small" language, suitable for educators, researchers, and users of embedded languages, focused on R5RS compatibility, and a "large" language focused on the practical needs of mainstream software development, intended to become a replacement for R6RS. The present report describes the "small" language of that effort: therefore it cannot be considered in isolation as the successor to R6RS.
The text herein was sourced and adapted as described in the "R7RS attribution of various text snippets" appendix.