Study Guide for Test on SICP Sections 1 to 1.3.2 This study guide contains two parts. The first is the actual directions from the test. These will appear on the first page. The second is a list of topics. DIRECTIONS FROM THE FIRST PAGE OF THE TEST This test is closed book and notes. If you need more space, use the back of a page. Note when you do that on the front. This test is timed. We will not grade your test if you try to take more than the time allowed. Therefore, before you begin, please take a moment to look over the entire test so that you can budget your time. For programs, indentation is important to us for ``clarity'' points; if your code is sloppy or hard to read, you will lose points. Correct syntax also matters. Check your code over for syntax errors. You will lose points if your code has syntax errors. Of course, you may write helping procedures or methods whenever you wish. It may be helpful to give a comment that describes what they do, if it's not completely clear from the name. You may assume that all Java code is in the same package on this test. TOPICS FOR THE TEST The problems on the test of the similar to the homework. Study Hint: probably the most helpful thing you can do is to create your own test (perhaps from problems in the textbook that were not assigned), take it on paper, and then type and debug your programs on-line. Topics that are more important are indicated by a +, those are less important by a -. 1. Language design, goals + Means of computation, means of combination, and abstraction. - Closure. + Special forms. + Applicative vs. normal order evaluation. 2. Scheme and Java notation for expressions + You should deal to translate from Java notation to Scheme notation, and vice versa. - You should know the most common precedence and associativity rules in Java (such as the rules relating to +, -, /, and *), however we won't get into any esoteric details. 3. Writing procedures (most of the points on this test) + You should be able to write procedures to solve numerical problems in both Scheme and Java. + You should be able to write linear recursive and tail recursive procedures in Scheme; these generate recursive and iterative processes respectively. We may ask you to use either linear recursion or tail recursion particularly for given problem. + You should be able to write procedures that use while loops in Java to solve similar problems. - You should know how to use local definitions in Scheme, and public and private in Java to control the names that are exported. + You should know what lambda means in Scheme, how it is used to pass procedures as arguments, and how to translate that into Java using interfaces and classes. + You should know how to test Java programs that take procedures as arguments. + You should know when to use static vs. nonstatic methods in Java.