Exercises and notes from Structure and Interpretation of Computer Programs