The primary purpose of programs is to be understood by human beings. Part 1 of this book introduces the concept of functional programming and describes a purely symbolic, minimalistic dialect of Scheme that is designed to be comprehensible. Part 2 applies symbolic programming techniques to problems of varying complexity. Topics of this part range from functions for sorting or permuting lists to "lazy" data structures, regular expression matching, formal language translation, and declarative programming. Part 3 implements the abstraction layer that is necessary for solving problems in an abstract way on a concrete computer. It reproduces the complete annotated source code for an interpreter of symbolic Scheme and delivers an example of clear and readable C code. The book contains the full source code to a compiler, a meta-circular interpreter, a logic programming system, and to the language that is used to implement all of these....More >< Less