exercises from MIT Structure and Interpretation  of Computer Programs