This is an introduction to the Scheme programming language. It is intended as a quick-start guide, something a novice can use to get a non-trivial working knowledge of the language, before moving on to more comprehensive and in-depth texts.
The text describes an approach to writing a crisp
and utilitarian Scheme. Although we will not cover
Scheme from abs
to zero?
, we will not shy away
from those aspects of the language that are difficult,
messy, nonstandard, or unusual, but nevertheless useful
and usable. Such aspects include
call‑with‑current‑continuation
, system
interface, and dialect diversity. Our
discussions will be informed by our focus on
problem-solving, not by a quest for metalinguistic
insight. I have therefore left out many of the staples
of traditional Scheme tutorials. There will be no
in-depth pedagogy; no dwelling on the semantic appeal
of Scheme; no metacircular interpreters; no discussion
of the underlying implementation;
and no evangelizing about Scheme’s virtues. This is
not to suggest that these things are unimportant.
However, they are arguably not immediately relevant to
someone seeking a quick introduction.
How quick though? I do not know if one can teach oneself Scheme in 21 days1, although I have heard it said that the rudiments of Scheme should be a matter of an afternoon’s study. The Scheme standard [23] itself, for all its exacting comprehensiveness, is a mere fifty pages long. It may well be that the insight, when it comes, will arrive in its entirety in one afternoon, though there is no telling how many afternoons of mistries must precede it. Until that zen moment, here is my gentle introduction.
Acknowledgment. I thank Matthias Felleisen for introducing me to Scheme and higher-order programming; and Matthew Flatt for creating the robust and pleasant MzScheme implementation used throughout this book.
—d
1 A fixnum is a machine’s idea of a “small” integer. Every machine has its own idea of how big a fixnum can be.