Notes for working through the structure and interpretation of computer programs