Topics for Test on EOPL Chapters 2.2-3 * Reminders For this test, you can use one (1) page (8.5 by 11 inches, one (1) side, no less than 8pt font) of notes. No photo-reduction is permitted. These notes are to be handed in at the end of the test. Use of other notes or failure to follow these instructions will be considered cheating. Please put your name in the top right corner of your notes. WARNING: you won't have time to learn the material during the test. Just write down what would be too tedious to remember otherwise. Topics marked + below are more important than topics marked - below. Topics marked ++ are even more important than the others. In general, things that are more like the homework will be more important. * Chapter 2 ** Tail recursion (end of 2.2) ++ be able to write a tail recursive procedure when asked to do so ++ know when to use tail recursion to solve problems and write a tail recursive procedure when it's useful (without being told to use tail recursion) ++ know when it's better to use full recursion to solve problems (e.g., over lists or other grammars) and write code to do that (without being told to use full recursion) ++ be able to deal with tail-recursion over vectors and strings * Chapter 2, section 3, Static properties of variables + static vs. dynamic properties ++ free and bound variable references in an expression, free and bound variable names in an expression - combinators ++ you should be able to write procedures like free?, bound?, free-vars, bound-vars over various grammars, including new ones (the grammars will be provided.) + region and scope of a declaration, hole in a scope, shadowing + you should be able to draw arrows from a variable reference to the declaration it refers to + you should be able to draw contours showing the regions of variable declarations ++ lexical address of a variable reference ++ you should be able to give the lexical address form of an expression + you should be able to write parts of lexical-address - variable capture - alpha conversion, be able to tell when expressions are equivalent