Structure and Interpretation of Computer Programs: Exercises with Solutions