Working through 'Structure and Interpretation of Computer Programs'.