Structure and interpretation of computer programs - Abelson, Harold (McGraw-Hill, 1996)