How to Design Programs : An Introduction to Programming and Computing - Felleisen; Felleisen, Matthias; Findler, R.; Flatt, M.; Krishnamurthi, S. (MIT Press, 2001)