solutions and code snippets from Structure and Interpretation of Computer Programs