exercise of  "Structure and Interpretation of Computer Programs"