Working through the book Structure and Interpretation of Computer Programs