How to Design Programs: An Introduction to Programming and Computing - Matthias Felleisen