{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Thorndale};}
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New{\*\falt Cumberland};}{\f29\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS;}{\f30\fswiss\fcharset128\fprq2 @Arial Unicode MS;}
{\f31\froman\fcharset238\fprq2 Times New Roman CE{\*\falt Thorndale};}{\f32\froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Thorndale};}{\f34\froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Thorndale};}
{\f35\froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Thorndale};}{\f36\froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Thorndale};}{\f37\froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Thorndale};}
{\f38\froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Thorndale};}{\f47\fmodern\fcharset238\fprq1 Courier New CE{\*\falt Cumberland};}{\f48\fmodern\fcharset204\fprq1 Courier New Cyr{\*\falt Cumberland};}
{\f50\fmodern\fcharset161\fprq1 Courier New Greek{\*\falt Cumberland};}{\f51\fmodern\fcharset162\fprq1 Courier New Tur{\*\falt Cumberland};}{\f52\fmodern\fcharset177\fprq1 Courier New (Hebrew){\*\falt Cumberland};}
{\f53\fmodern\fcharset178\fprq1 Courier New (Arabic){\*\falt Cumberland};}{\f54\fmodern\fcharset186\fprq1 Courier New Baltic{\*\falt Cumberland};}{\f265\fswiss\fcharset0\fprq2 Arial Unicode MS Western;}{\f263\fswiss\fcharset238\fprq2 Arial Unicode MS CE;}
{\f264\fswiss\fcharset204\fprq2 Arial Unicode MS Cyr;}{\f266\fswiss\fcharset161\fprq2 Arial Unicode MS Greek;}{\f267\fswiss\fcharset162\fprq2 Arial Unicode MS Tur;}{\f268\fswiss\fcharset177\fprq2 Arial Unicode MS (Hebrew);}
{\f269\fswiss\fcharset178\fprq2 Arial Unicode MS (Arabic);}{\f270\fswiss\fcharset186\fprq2 Arial Unicode MS Baltic;}{\f273\fswiss\fcharset0\fprq2 @Arial Unicode MS Western;}{\f271\fswiss\fcharset238\fprq2 @Arial Unicode MS CE;}
{\f272\fswiss\fcharset204\fprq2 @Arial Unicode MS Cyr;}{\f274\fswiss\fcharset161\fprq2 @Arial Unicode MS Greek;}{\f275\fswiss\fcharset162\fprq2 @Arial Unicode MS Tur;}{\f276\fswiss\fcharset177\fprq2 @Arial Unicode MS (Hebrew);}
{\f277\fswiss\fcharset178\fprq2 @Arial Unicode MS (Arabic);}{\f278\fswiss\fcharset186\fprq2 @Arial Unicode MS Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;
\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{
\s15\ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 \snext15 Default;}{\s16\ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 
\f2\fs20\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 \sbasedon15 \snext16 Preformatted Text;}{\s17\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\aspalpha\faauto\rin0\lin0\itap0 \fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 
\sbasedon15 \snext17 header;}{\*\cs18 \additive \fs24\cf1\lang0\langfe255\langfenp255 Numbering Symbols;}{\*\cs19 \additive \fs24\cf1\lang0\langfe255\langfenp255 WW-Default Paragraph Font;}{\*\cs20 \additive \fs24\cf1\lang0\langfe255\langfenp255 
\sbasedon19 page number;}}{\info{\author Sharon Tuttle}{\operator CNRS}{\creatim\yr2002\mo9\dy26\hr8\min15}{\revtim\yr2002\mo12\dy13\hr15\min11}{\printim\yr2002\mo12\dy12\hr9\min53}{\version2}{\edmins0}{\nofpages4}{\nofwords1012}{\nofchars5774}
{\*\company CNRS-HSU}{\nofcharsws7090}{\vern8269}}\margt2093 \deftab1250\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3
\jcompress\viewkind1\viewscale100\nolnhtadjtbl \fet0\sectd \sbknone\linex0\headery1440\sectdefaultcl {\header \pard\plain \s17\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\aspalpha\faauto\rin0\lin0\itap0 
\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\fs16 CS 131 - Final Examination Study Suggestions\tab \tab p. }{\field{\*\fldinst {\\page}}{\fldrslt {\lang1024\langfe1024\noproof 2}}}{
\par }{\fs16 December 13, 2002\tab \tab 
\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}
{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8
\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s15\ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 
\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {CS 131 - Fall 2002
\par Final Examination Study Suggestions
\par 
\par }{\b last modified: 12-13-02
\par }{
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {*\tab The Final Examination is }{\b Thursday, December 19th, }{at }{\b 10:20 am}{, in }{\b FH 204}{.
\par 
\par *\tab Remember: anything covered in assigned course reading, in lecture, or on a homework, is FAIR GAME.
\par 
\par *\tab The Final Examination is }{\b cumulative}{ and will cover all of the semester's material.
\par 
\par *\tab These are simply suggestions of some especially important concepts covered since Midterm #2, to help you in your studying.
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab (you should combine this with your Midterms #1 and #2, and your study notes for those midterms --- those reviews are not re-reviewed here...)
\par 
\par *\tab and, all of the above should be supplemented with your homeworks, lecture notes, posted in-class examples, and the textbook, of course.
\par 
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {*\tab The general style of the test will be similar to the midterms; there may be short-answer questions, and you will be both writing and reading functions and progr
ams. Concepts and terminology may also be involved.
\par 
\par *\tab Style-related issues and the design recipe are fair game, of course, as possible test-question material.
\par 
\par *\tab be familiar with function }{\b equal?}{ --- why is it particularly useful in testing functions?
\par 
\par *\tab }{\b HtDP, Section 12 - }{included recursive auxiliary functions
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab 
this section is important, as it discusses further the large-scale problem of designing a program (breaking it into pieces, situations for which we know approaches for how to start, etc.)
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab }{\b Recursive auxiliary functions}{
\par }\pard \s15\ql \fi-435\li1290\ri0\nowidctlpar\aspalpha\faauto\rin0\lin1290\itap0 {*\tab this is where }{\b insertion sort}{ was discussed --- its }{\b sort}{ function is itself recursive, AND it calls a }{\b recursive auxiliary function}{, }{\b insert}{
, to help to accomplish the desired sorting; (both functions sort and insert are recursive)
\par 
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab the ideas in }{\b generalizing problems }{and }{\b generalizing functions}{
 are also important, and are built upon in our discussions of functions that call other functions.
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par 
\par *\tab }{\b Local definitions and lexical scope }{(Intermezzo 3/Section 18)
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab what is the syntax of a }{\b local-}{expression? What is the left-hand-side and right-hand-side of a local expression? What is a local expresion's semantics?
\par 
\par *\tab what is the difference between a }{\b local definition}{ and a }{\b top-level definition}{? If I gave you a Scheme file's contents, could you identify which definitions were }{\b local}{ and which were at the }{\b top-level}{?
\par 
\par *\tab what is the }{\b scope}{ of a definition? What is the }{\b scope }{of a variable?
\par 
\par *\tab Given code, could you tell if something is a }{\b binding occurrence}{ or a }{\b bound occurrence}{? Could you determine the }{\b binding occurrence}{ for a given variable? Could you determine }{\b bound occurrences}{ for a given variable?
\par 
\par *\tab what are some kinds of situations where }{\b local}{ is useful? (pragmatics of local!)
\par 
\par *\tab expect to have to read, write code involving local-expressions.
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par *\tab }{\b Functions working on functions}{
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab more on }{\b functional abstraction }{--- the process of combining two related functions into a single function.
\par 
\par *\tab (this doesn't HAVE to lead to a function that takes a function as input --- consider contains-doll? and contains-car? abstracted to contains? --- but it might...)
\par 
\par *\tab can you read, write functions that take a function as one of their arguments?
\par 
\par *\tab You need to be comfortable with Scheme's built-in abstract functions for list-processing (Fig. 57, p. 313), but note that I do }{\b not}{
 expect you to memorize them. If I were to give you contracts, purposes, and headers for some of them, however, I'd expect you to be able to make USE of them...(in terms of reading }{\i and}{ writing code with them)
\par 
\par *\tab How do you write the contract for a function that takes a function as one of its arguments?
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par *\tab }{\b Parametric data definitions}{
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab (result, really, from noting similarities in }{\b data definitions}{ --- so, this is another example of }{\b abstraction}{!)
\par 
\par *\tab can you write a parametric data definition? Can you read one?
\par 
\par *\tab once you have a parametric data definition, can you make use of it in function/program contracts?
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par *\tab }{\b Structural vs. generative recursion}{
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab how do these differ?
\par 
\par *\tab if I were to give you a function definition, could you tell me if:
\par }\pard \s15\ql \fi-435\li1290\ri0\nowidctlpar\aspalpha\faauto\rin0\lin1290\itap0 {*\tab ...it is recursive or not?
\par 
\par *\tab ...if it uses structural recursion?
\par 
\par *\tab ...if it uses generative recursion but not structural recursion?
\par 
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab what is a termination argument? Why is it considered to be needed as part of the design recipe for generative recursion but not for structural recursion?
\par 
\par *\tab you should be comfortable with both }{\b insertion sort}{ (which uses structural recursion) and }{\b quicksort}{ (which uses generative recursion)
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par *\tab }{\b Introduction to graphical user interfaces (GUI's)}{
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab important concept: it is better to SEPARATE the development of the}{\b  core program }{(}{\b model}{) from the development of a GUI for that }{\b model }{(its }{\b 
interface program}{, or }{\b view}{)
\par 
\par *\tab need to be comfortable with the idea of a GUI manager, how it interacts with a GUI.
\par 
\par *\tab 
need to be comfortable with DrScheme's gui.ss teachpack, but, again, note that I do not expect you to memorize it. If I were to give you contracts, purposes, and headers for parts of this teachpack, I would expect you to be able to make USE of them (in te
rms of reading }{\i and}{ writing code with them).
\par }\pard \s15\ql \fi-435\li1290\ri0\nowidctlpar\aspalpha\faauto\rin0\lin1290\itap0 {*\tab should have a basic understanding of the 4 GUI components within the gui.ss teachpack, how they can be used.
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {*\tab }{\b Vectors}{
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab you might have to }{\b create}{ a vector, given a description;
\par 
\par *\tab how is a vector different from a list? Why is this difference sometimes desirable? (When might a vector be preferred? When might a list be preferred?)
\par 
\par *\tab Given a vector, you should be able to give its length, as well as the range of its indices.
\par 
\par *\tab given a defined vector --- could you write expressions accessing a particular element within that vector?
\par 
\par *\tab Could you write a function involving every element of a vector parameter?
\par 
\par *\tab If I were to give you contract, purpose, and header for }{\b build-vector}{, I'd expect you to be able to make use of it (both in terms of reading and writing code involving it).
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par *\tab }{\b Changing variables: set! and begin}{
\par }\pard \s15\ql \fi-435\li855\ri0\nowidctlpar\aspalpha\faauto\rin0\lin855\itap0 {*\tab be aware that a variable must be defined before you can use set! to give it a different value...
\par 
\par *\tab be aware, also, that you must use set! within the lexical scope of that variable.
\par 
\par *\tab I could give you a code fragment containing begin and set! statements, and ask you what would happen if that code was executed.
\par 
\par *\tab 
you should understand that begin is useful (more convenient than local) if you'd like to do several expressions and only care about the value returned from the last of those expressions --- it evaluates all of its expressions, throwing away the values of 
all except for the last. This works fine if all but the last expression are expressions that only have }{\b effects}{ that you care about (such as }{\b set!}{).
\par 
\par *\tab you should be able to read, write examples where set! is used to maintain "state" variables (that, for example, can help in deciding what should happen in consecutive calls to some function, or can help in allowing functions to cooperate, etc.)

\par 
\par *\tab In a function's contract, what should you put as the return type for a function that doesn't return *anything*? Within a contract, how do you handle a function that takes *no* parameters?
\par 
\par 
\par }\pard \s15\ql \fi-435\li420\ri0\nowidctlpar\aspalpha\faauto\rin0\lin420\itap0 {
\par 
\par 
\par }}