This book teaches fundamentals of symbolic computing (list processing and symbolic manipulation) using the Small Lisp interpreter. Emphasis is on techniques applicable to formally defined notation systems including the grammar-based definition and representation of such systems, recursive programming on symbolic data domains, environment structures and their use in interpretation and evaluation applications, transformation techniques such as expression simplification and program transformation, and language-to-language translation. The authors also emphasize the software engineering approach to constructing symbolic computing applications through techniques such as functional programming, data abstraction, data-driven design and rapid prototyping. This book is aimed at people on courses in functional computing or Lisp programming. It should also be of use as a supplement for courses in artificial intelligence, or comparative programming.