sicp 3.35 - 3.40