How to design programs : an introduction to programming and computing - Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shiram (MIT Press, 2001)