Foreword for The Seasoned Schemer

If you give someone a fish, he can eat for a day.
If you teach someone to fish, he can eat for a lifetime.

This familiar proverb applies also to data structures in programming languages.

If you have read The Little Lisper (recently revised and retitled: The Little Schemer), the predecessor to this book, you know that lists of things are at the heart of Lisp. Indeed, ``LISP'' originally stood for ``LISt Processing.'' By the same token, I suppose that the C programming language could have been called CHAP (for ``CHAracter Processing'') and Fortran could have been FLOP (for ``FLOating-point Processing'').

Now C without characters or Fortran without its floating-point numbers would be almost unthinkable. They would be completely different languages, perhaps almost useless. What about Lisp without lists? Well, Lisp has not only lists but functions that perform computations. And we have learned, slowly and sometimes laboriously over the years, that while lists are the heart of Lisp, functions are the soul.

Lisp must, of course, have lists; yet functions are enough. Dan and Matthias will show you the way. The Little Lisper was truly a feast; but, as you will see, there is more to life than food.

Have you eaten? Very good. Now you are prepared for the real journey.

Come, learn to fish!


In Fortran you can speak of numbers, and in C of characters and strings. In Lisp, you can speak of Lisp. Everything Lisp does can be described as a Lisp program, simply and concisely.

And where shall you go from here? Suppose you were to tinker with the programs in Chapter 20. Add a feature, change a feature ... You will have a new language, perhaps still like Lisp or perhaps wildly different. The new language may be described in Lisp, yet it will be not Lisp, but a new creation.

If you give someone Fortran, he has Fortran.
If you give someone Lisp, he has any language he pleases.

---Guy L. Steele Jr.