I appreciate the consistency of exposition, especially when explaining recursion of execution and recursive datatypes using basis and induction cases. It's a book for those who are interested in the crossover between CS theory and mathematics, but only introductory calculus is necessary (and that's only in one section). If you come from a procedural programming background, as I did, this book is an excellent introduction to the techniques of functional programming. I would recommend reading this in conjunction with ML for the Working Programmer by Paulson. If you are looking for a gentler introduction to functional languages, like LISP and its sister Scheme, try The Little Schemer by Friedman and Felleisen.