Structure And Interpretation Of Computer Programs by Harold Abelson & Gerald Jay Sussman