How to design programs : an introduction to programming and computing - Felleisen, Matthias (MIT Press ; Prentice Hall, 2001)