My attempt at the exercises in "Structure and Interpretation of Computer Programs" http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/