Structure and interpretation of computer programs - Abelson, Harold (The MIT Press, 1996)