working through "Structure and Interpretation of Computer Programs"