2.3.2 and all the examples from sicp