Moved over SICP code.