xvii
This book was a long time in coming, and Tim went through three assistants
while I was working on it. All these people were helpful and competent, so my
thanks to Brenda Modliszewksi, Stacie Pierce, and Richard Camp. “Competent”
may sound faint, but I consider it the highest praise.
Many thanks to Troy Lilly and Simon Crump, the production managers,
who were not only competent but also fun to work with.
Shortly before the book went into production, I started writing tests for the
example code. I realized with horror that hardly any of the programs worked
properly. There were numerous small errors (and some not so small), inconsis-
tencies between the code and the output, typos, and so on. Thanks to the heroic
eleventh-hour efforts of Robert Spier, I think most of these errors have been
caught. Robert was not only unfailingly competent, helpful, and productive,
but also unfailingly cheerful, too. If any of the example programs in this book
work as they should, you can thank Robert. (If they don’t, you should blame
me, not Robert.) Robert was also responsible for naming the MOD document
preparation system that I used to prepare the manuscript.
The contributions of my wife, Lorrie Kim, are too large and pervasive to
note individually. It is to her that this book is dedicated.
A large number of other people contributed to this book, but many of them
were not aware of it at the time. I was fortunate to have a series of excellent
teachers, whose patience I must sometimes have tried terribly. Thanks to Mark
Foster, Patrick X. Gallagher, Joan Livingston, Cal Lobel (who first taught me to
program), Harry McLaughlin, David A. J. Meyer, Bruce Piper, Ronnie Rabassa,
Michael Tempel, and Johan Tysk. Mark Foster also arrived from nowhere in the
nick of time to suggest the title for this book just when I thought all was lost.
This book was directly inspired by two earlier books: ML for the Working
Programmer, by Lawrence Paulson, and Structure and Interpretation of Computer
Programs, by Harold Abelson and Gerald Jay Sussman. Other important influ-
ences were Introduction to Functional Programming, by Richard Bird and Philip
Wadler, and Paradigms of Artificial Intelligence Programming, by Peter Norvig.
The official technical reviewers had a less rewarding job than they might have
on other projects. This book took a long time to write, and although I wanted to
have long conversations with the reviewers about every little thing, I was afraid
that if I did that, I would never ever finish. So I rarely corresponded with the
reviewers, and they probably thought that I was just filing their suggestions in the
shredder. But I wasn’t; I pored over all their comments with the utmost care, and
agonized over most of them. My thanks to the reviewers: Sean Burke, Damian
Conway, Kevin Lenzo, Peter Norvig, Dan Schmidt, Kragen Sitaker, Michael
Scott, and Adam Turoff.
While I was writing, I ran a mailing list for people who were interested in
the book, and sent advance chapters to the mailing list. This was tremendously