exercise 2.58b
exercised 2.59-2.63