Notes on 'Structure and Interpretation of Computer Programs'