Structure and interpretation of computer programs - Abelson, Harold (MIT electrical engineering and computer science series., 1996)