Author: R. Kent Dybvig
Publisher: MIT Press; 4th edition, 2009
Aimed at: Academic computer scientists
Pros: Comprehensive and authoritative
Cons: Dense, terse textbook style
Reviewed by: Mike James
Scheme is a language derived from Lisp and as such it is loved by academics who want to make use of its recursion and list processing and the fact that a Scheme program can be naturally treated as Scheme data.
As a language Scheme even looks complicated and advanced and this particular book does nothing to put the beginner at ease. Right from the word go we have an academic presentation with some concession to informal language. For example, from the section Typographical and Notational Conventions:
This book uses the words "must" and "should" to describe program requirements, such as the requirement to provide an index that is less than the length of the vector in a call to vector-ref. If the word "must" is used, it means that the requirement is enforced by the implementation, i.e. an exception is raised, usually with condition type Assertion. If the word "should" is used, an exception may or may not be raised, and if not, the behaviour of the program is undefined."
You need to keep in mind that this is on page 9 and none of the Scheme language has yet been introduced. This is fine in the sense that it is logical but it is hardly an approach that is likely to introduce Scheme to a wider audience. Of course if you want an academic approach and already have the basic idea of what Lisp like languages are all about it might even be a positive advantage.
From the introduction the book moves on to really introduce Scheme but even though the tone is more "when you type this you get this" it still tends to use and reference ideas not yet introduced. By the end of Chapter Two we have lists, car and cdr, recursion, lambda expressions and most of what you need to write programs. The explanations make some attempt at being reader-friendly but this is just a thin cover over the basically academic approach. I can't imagine that many would think that this is a fun read and it is unlikely to spread the enthusiasm for Scheme to a wider community but it is very suitable as a textbook for a computer science or AI course.
Chapters Three, Four and Five complete the Scheme course and take us up to advanced recursion, continuation, binding and control operations. Chapter Six deals with objects and from this point on the book is a collection of special topics – input/output, syntactic extension, records, libraries and exceptions.
The final chapter consists of extended examples – matrix multiplication, sorting, set construction, word frequency counting, scheme printer, formatting, meta interpreter for Scheme, fast Fourier transform, unification and multitasking. Some of the examples take us away from the usual areas that Scheme is generally applied to. Each chapter has exercises and some of these are answered in an appendix.
Overall this provides an authoritative treatment of Scheme which, as an academic text is comparatively easy to read – but Scheme for dummies it certainly isn't.