Chapter 3 from practical lisp