2 Revised
3
Scheme
INTRODUCTION
Programming languages should be designed not by piling
feature on top of feature, but by removing the weaknesses
and restrictions that make additional features appear nec-
essary. Scheme demonstrates that a very small number of
rules for forming expressions, with no restrictions on how
they are composed, suffice to form a practical and efficient
programming language that is flexible enough to support
most of the major programming paradigms in use today.
Scheme has i nfl ue n ced the evolution of Lisp. Scheme was
one of the first programming languages to incorporate firs t
class procedures as in the lambda calculus, thereby proving
the usefulness of static scope rules and block structure in
a dynamically typed language. Scheme was the first major
dialect of Lisp to distinguish procedu r e s from lambda ex-
pressions and symbols, to use a single lexical environment
for all variables, and to evaluate the operator position of
a proce du r e call in the same way as an operand p osi tion.
By relying entirely on procedure calls to express iteration,
Scheme emph asiz ed the fact that tail-recursive procedure
calls are essentially goto’s that pass arguments. Scheme
was th e first widely used programming language to em-
brace first class escape procedures, from which all known
sequential control struct ur e s can be synthesized. A few
of these inn ovations have recently been incorporated into
Common Lisp, while others remain to be adopted.
Background
The first descripti on of Scheme was written in 1975 [48 ]. A
revised report [44] appeared in 1978, which described the
evolution of the language as its MIT implementation was
upgraded to support an innovative compiler [41]. Three
distinct projects began in 1981 and 1982 to use variants
of Scheme for courses at MIT, Yale, and Indiana Univer-
sity [30, 23, 10]. An introductory computer science text-
bo ok using Scheme was published in 1984 [1].
As might be expected of a language used primarily for ed-
ucation and research, Scheme has always evolved rapidly.
This was no problem when Scheme was used only within
MIT, but as Scheme became more widespread, local di-
alects b egan to diverge until students and researchers oc-
casionally found it difficult to und er s t and code written at
other sites.
Fifteen repres entatives of the major implementations of
Scheme therefore met in October 1984 to work toward
a better and more widely accepted standard for Scheme.
Participating in this workshop were Hal Abelson, Nor-
man Adams, David Bartley, Gar y Brooks, William Clinger,
Daniel Friedman, Robert Halstead, Chris Hanson, Christo-
pher Haynes, Eugene Kohlbecker, Don Oxley, Jonathan
Rees, Guillermo Rozas, Gerald Jay Sussman, and Mitchell
Wand. Kent Pitman made valuable contributions to the
agenda for the workshop but was unable to attend the ses-
sions.
Subsequent electronic mail discussions and committee work
completed the definition of the language. Gerry Su s sman
drafted the section on numbers, Chris Hanson drafted the
sections on characters and strings, and Gary Brooks and
William Clinger drafted the sections on inp ut and output.
William Clinger recorded the decisions of the workshop and
compiled the pieces into a coherent document. The “Re-
vised revised re port on Scheme” [4] was publish ed at MIT
and Indiana University in the summer of 1985. Another
round of revision in the spring of 1986, again accomplished
almost entirely by electronic mail, resulted in the present
report.
We intend this report to belong to the entire Scheme com-
munity, and so we grant permission to copy it in whole or in
part without fee. In particular, we encourage implementors
of Scheme to use this report as a starting point for manuals
and other documentation, modifying it as necessary.
Acknowledgements
We would like to thank the following people for their
comments and criticisms: Alan Bawden, George Carrette,
Andy Cromarty, Andy Freeman, Richard Gabriel, Yekta
G¨ursel, Ken Haase, Paul Hudak, Richard Kelsey, Chris
Lindblad, Mark Meyer, Jim Miller, Jim Philbin, John
Ramsdell, Guy Lewis Steele Jr., Julie Sussman, Perry Wa-
gle, Daniel Weise, and Henry Wu. We thank Carol Fes-
senden, Daniel Friedman, and Christopher Haynes for per-
mission to use text from the Scheme 311 version 4 reference
manual. We thank Texas Instruments, Inc. for permission
to use text from the TI Scheme Language Reference M an-
ual. We gladly acknowledge the influen c e of manuals for
MIT Scheme, T, Scheme 84, Common Lisp, and Algol 60.
We also thank Betty Dexter for the extreme effort she put
into setting this report in T
E
X, and Donald Knuth for de-
signing the program that caused her troubles.
The Artificial Intelligence Laboratory of the M as sachusetts
Institute of Techn ology and the Computer S cie nc e Depart-
ment of Ind iana University supported the preparation of
this report. Support for the MIT work was provided in
part by the Advanc ed Research Projects Agency of the
Department of Defense under Office of Naval Research con-
tract N00014-80-C-0505. Support for the Indi ana Univer-
sity work was provided by NSF grants NCS 83-04567 and
NCS 83-03325.