CS 257: Textbooks, Documentation, Scheme Implementations, and Related Material

Primary Text

The primary text is Scheme and the art of Programming by George Springer and Daniel P. Friedman (MIT Press, 1989). Although it's at the bookstore, you might save a few bucks ordering from amazon.com, or perhaps bookpool.com, especially if a couple students go in together on one order to share the shipping costs. This text will be supplemented by lecture notes made available on the web.

The textbook was written for an introductory programming class, using Scheme as the language of instruction. As such, it covers a number of topics with which you are already familiar, including in particular how to program in an imperitive style using side effects. Thus, we will not use Part 3. The course will also cover a number of topics not covered in the book, in particular tail recursion, transforming programs between functional and imperative styles, and writing interpreters. We will also explore higher-order functions in greater depth.

Supplementary Texts

Those born with a silver left parenthesis in their mouth may enjoy The Little Schemer by Daniel P. Friedman and Matthias Felleisen (4th edition, MIT Press, 1995), a delightful supplementary text, and its successor The Seasoned Schemer. If you're really hard core, check out The Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman (2nd edition, MIT Press, 1996).

Scheme Implementation

We will use the MzScheme Scheme implementation, which is principled and fast enough for our purposes. You can access the documentation locally via the file ~cslab/CS257/plt/doc/mzscheme/index.html. (If you want to do systems programming in Scheme you might want to glance at rscheme, a rather zippy implementation, or at the Scheme Shell scsh, or at the unstable but allegedly faster-than-C Stalin. If you want to use Scheme as the extension language for an application you are writing, have a look at the Guile library.)

Scheme Language Manuals

For help programming, have a look at this list of Scheme idioms. Also you will for sure want to use the R4RS Manual, which describes the Scheme standard, available locally in ~cslab/CS257/plt/doc/r4rs/index.html. The cute Teach Yourself Scheme in Fixnum Days by Dorai Sitaram is useful also.

Emacs: The Ultimate Text Editor

You probably will want to use GNU Emacs as your programming editor. I do. Or use XEmacs if you prefer. The brief GNU Emacs reference card can be helpful. Please do not use PINE - it is not a good programming editor, it will not catch your unbalanced parenthesis, it will not indent your code, it will not zap your changed definitions over to Scheme. Trust me: learn Emacs and you will not regret it. It's great for editing C code too! Emacs has a gentle online tutorial, it really won't take you long to learn enough Emacs to muddle through.

CDROMs containing MzScheme and GNU Emacs sources, binaries compiled for Linux, MacOS, and other operating systems, plumbing graphics, relevent reference material in html format, and a Debian GNU/Linux distribution in the remaining space, will be put on reserve in the library.

Last Semester's CS257 Web Page

Here is a link to last semester's CS257: Non-Imperative Programming in Scheme! web page, taught by Lance Williams. Sometimes it helps to see things from another perspective, and perhaps something on his pages may help you in this semester, so please feel free to investigate these pages if you think it might be of help you.


Barak Pearlmutter <bap@cs.unm.edu>