Structure and interpretation of computer programs - Abelson, Harold. (MIT Press ; McGraw-Hill, 1996)