sicp exercise 1.16