My take on the SICP exercises