Explorar o código

finished ch 2

Jeremy Siek %!s(int64=3) %!d(string=hai) anos
pai
achega
1fe01dd440
Modificáronse 1 ficheiros con 42 adicións e 42 borrados
  1. 42 42
      book.tex

+ 42 - 42
book.tex

@@ -1664,7 +1664,7 @@ Appendix~\ref{appendix:utilities}.\\
 \fi}
 \fi}
 % TODO: python version of testing the PE
 % TODO: python version of testing the PE
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Create three programs in the \LangInt{} language and test whether
   Create three programs in the \LangInt{} language and test whether
   partially evaluating them with \code{pe\_Lint} and then
   partially evaluating them with \code{pe\_Lint} and then
   interpreting them with \code{interp\_Lint} gives the same result
   interpreting them with \code{interp\_Lint} gives the same result
@@ -3039,7 +3039,7 @@ produce a new list.\index{subject}{for/list}
 \end{figure}
 \end{figure}
 
 
 \begin{exercise}
 \begin{exercise}
-\normalfont % I don't like the italics for exercises. -Jeremy
+\normalfont\normalsize % I don't like the italics for exercises. -Jeremy
 
 
 Complete the \code{uniquify} pass by filling in the blanks in
 Complete the \code{uniquify} pass by filling in the blanks in
 Figure~\ref{fig:uniquify-Lvar}, that is, implement the cases for
 Figure~\ref{fig:uniquify-Lvar}, that is, implement the cases for
@@ -3048,7 +3048,7 @@ in the support code.
 \end{exercise}
 \end{exercise}
 
 
 \begin{exercise}
 \begin{exercise}
-\normalfont % I don't like the italics for exercises. -Jeremy
+\normalfont\normalsize
 \label{ex:Lvar}
 \label{ex:Lvar}
 
 
 Create five \LangVar{} programs that exercise the most interesting
 Create five \LangVar{} programs that exercise the most interesting
@@ -3330,7 +3330,7 @@ print(b)
 \end{center}
 \end{center}
 
 
 \begin{exercise}
 \begin{exercise}
-  \normalfont
+  \normalfont\normalsize
 {\if\edition\racketEd  
 {\if\edition\racketEd  
 Implement the \code{remove\_complex\_operands} function in
 Implement the \code{remove\_complex\_operands} function in
 \code{compiler.rkt}.
 \code{compiler.rkt}.
@@ -3361,7 +3361,7 @@ intermediate programs, place \lstinline{(debug-level 1)} before the call to
 
 
 {\if\edition\pythonEd
 {\if\edition\pythonEd
 \begin{exercise}
 \begin{exercise}
-\normalfont % I don't like the italics for exercises. -Jeremy
+\normalfont\normalsize
 \label{ex:Lvar}
 \label{ex:Lvar}
 
 
 Create five \LangVar{} programs that exercise the most interesting
 Create five \LangVar{} programs that exercise the most interesting
@@ -3496,7 +3496,7 @@ This code organization is also related to continuation-passing style,
 except that \code{cont} is not what happens next during compilation,
 except that \code{cont} is not what happens next during compilation,
 but what happens next in the generated code.
 but what happens next in the generated code.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Implement the \code{explicate\_control} function in
 Implement the \code{explicate\_control} function in
 \code{compiler.rkt}.  Create three new \LangInt{} programs that
 \code{compiler.rkt}.  Create three new \LangInt{} programs that
@@ -3647,7 +3647,7 @@ compiler portable across Linus and Mac OS X, which requires an underscore prefix
 all labels.
 all labels.
 \fi}
 \fi}
 \begin{exercise}
 \begin{exercise}
-  \normalfont
+  \normalfont\normalsize
 {\if\edition\racketEd
 {\if\edition\racketEd
 Implement the \code{select\_instructions} pass in
 Implement the \code{select\_instructions} pass in
 \code{compiler.rkt}. Create three new example programs that are
 \code{compiler.rkt}. Create three new example programs that are
@@ -3750,7 +3750,7 @@ multiple of 16 bytes.\index{subject}{frame}
 
 
 % TODO: store the number of variables instead? -Jeremy
 % TODO: store the number of variables instead? -Jeremy
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Implement the \code{assign\_homes} pass in
 Implement the \code{assign\_homes} pass in
 \racket{\code{compiler.rkt}}\python{\code{compiler.py}}, defining
 \racket{\code{compiler.rkt}}\python{\code{compiler.py}}, defining
 auxiliary functions for each of the non-terminals in the \LangXVar{}
 auxiliary functions for each of the non-terminals in the \LangXVar{}
@@ -3826,7 +3826,7 @@ from \key{rax} to the destination location, as follows.
 \end{lstlisting}
 \end{lstlisting}
 
 
 \begin{exercise}
 \begin{exercise}
-\normalfont Implement the \key{patch\_instructions} pass in
+\normalfont\normalsize Implement the \key{patch\_instructions} pass in
 \racket{\code{compiler.rkt}}\python{\code{compiler.py}}.
 \racket{\code{compiler.rkt}}\python{\code{compiler.py}}.
 Create three new example programs that are
 Create three new example programs that are
 designed to exercise all of the interesting cases in this pass.
 designed to exercise all of the interesting cases in this pass.
@@ -3866,7 +3866,7 @@ all labels, e.g., changing \key{main} to \key{\_main}.
   function that returns \code{'Linux'}, \code{'Windows'}, or
   function that returns \code{'Linux'}, \code{'Windows'}, or
   \code{'Darwin'} (for Mac).}
   \code{'Darwin'} (for Mac).}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Implement the \key{prelude\_and\_conclusion} pass in
 Implement the \key{prelude\_and\_conclusion} pass in
 \racket{\code{compiler.rkt}}\python{\code{compiler.py}}.
 \racket{\code{compiler.rkt}}\python{\code{compiler.py}}.
@@ -3909,7 +3909,7 @@ adapting and improving the partial evaluator for \LangInt{} that was
 introduced in Section~\ref{sec:partial-evaluation}.
 introduced in Section~\ref{sec:partial-evaluation}.
 
 
 \begin{exercise}\label{ex:pe-Lvar}
 \begin{exercise}\label{ex:pe-Lvar}
-\normalfont
+\normalfont\normalsize
   
   
 Adapt the partial evaluator from Section~\ref{sec:partial-evaluation}
 Adapt the partial evaluator from Section~\ref{sec:partial-evaluation}
 (Figure~\ref{fig:pe-arith}) so that it applies to \LangVar{} programs
 (Figure~\ref{fig:pe-arith}) so that it applies to \LangVar{} programs
@@ -3920,9 +3920,9 @@ instead of \LangInt{} programs. Recall that \LangVar{} adds variables and
 to the \LangInt{} language, so you will need to add cases for them in
 to the \LangInt{} language, so you will need to add cases for them in
 the \code{pe\_exp}
 the \code{pe\_exp}
 %
 %
-\racket{function}
+\racket{function.}
 %
 %
-\python{and \code{pe\_stmt} functions}.
+\python{and \code{pe\_stmt} functions.}
 %
 %
 Once complete, add the partial evaluation pass to the front of your
 Once complete, add the partial evaluation pass to the front of your
 compiler and make sure that your compiler still passes all of the
 compiler and make sure that your compiler still passes all of the
@@ -3930,7 +3930,7 @@ tests.
 \end{exercise}
 \end{exercise}
 
 
 \begin{exercise}
 \begin{exercise}
-\normalfont
+\normalfont\normalsize
 
 
 Improve on the partial evaluator by replacing the \code{pe\_neg} and
 Improve on the partial evaluator by replacing the \code{pe\_neg} and
 \code{pe\_add} auxiliary functions with functions that know more about
 \code{pe\_add} auxiliary functions with functions that know more about
@@ -4482,7 +4482,7 @@ L_{\mathsf{after}}(5)=  \emptyset
 \label{fig:liveness-example-0}
 \label{fig:liveness-example-0}
 \end{figure}
 \end{figure}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Perform liveness analysis on the running example in
   Perform liveness analysis on the running example in
   Figure~\ref{fig:reg-eg}, computing the live-before and live-after
   Figure~\ref{fig:reg-eg}, computing the live-before and live-after
   sets for each instruction. Compare your answers to the solution
   sets for each instruction. Compare your answers to the solution
@@ -4556,7 +4556,7 @@ L_{\mathsf{after}}(5)=  \emptyset
 \label{fig:live-eg}
 \label{fig:live-eg}
 \end{figure}
 \end{figure}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Implement the \code{uncover\_live} \racket{pass}\python{function}.
   Implement the \code{uncover\_live} \racket{pass}\python{function}.
   %
   %
 \racket{Store the sequence of live-after sets in the $\itm{info}$
 \racket{Store the sequence of live-after sets in the $\itm{info}$
@@ -4832,7 +4832,7 @@ shown in Figure~\ref{fig:interfere}.
 %% the set of adjacent vertices, and the sets are represented using
 %% the set of adjacent vertices, and the sets are represented using
 %% Racket's \key{set}, which is also a hash table.
 %% Racket's \key{set}, which is also a hash table.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 \racket{Implement the compiler pass named \code{build\_interference} according
 \racket{Implement the compiler pass named \code{build\_interference} according
 to the algorithm suggested above. We recommend using the Racket
 to the algorithm suggested above. We recommend using the Racket
   \code{graph} package to create and inspect the interference graph.
   \code{graph} package to create and inspect the interference graph.
@@ -5547,7 +5547,7 @@ callq print_int
 \fi}
 \fi}
 \end{center}
 \end{center}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Implement the compiler pass \code{allocate\_registers}.
 Implement the compiler pass \code{allocate\_registers}.
 %
 %
@@ -5659,7 +5659,7 @@ callq print_int
 \fi}
 \fi}
 \end{center}
 \end{center}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Update the \code{patch\_instructions} compiler pass to delete trivial moves.
 Update the \code{patch\_instructions} compiler pass to delete trivial moves.
 %
 %
@@ -5835,7 +5835,7 @@ main:
 \label{fig:running-example-x86}
 \label{fig:running-example-x86}
 \end{figure}
 \end{figure}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Update the \code{prelude\_and\_conclusion} pass as described in this section.
 Update the \code{prelude\_and\_conclusion} pass as described in this section.
 %
 %
 \racket{
 \racket{
@@ -6318,7 +6318,7 @@ callq print_int
 \end{minipage}
 \end{minipage}
 \fi}
 \fi}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Change your implementation of \code{allocate\_registers} to take move
 Change your implementation of \code{allocate\_registers} to take move
 biasing into account. Create two new tests that include at least one
 biasing into account. Create two new tests that include at least one
 opportunity for move biasing and visually inspect the output x86
 opportunity for move biasing and visually inspect the output x86
@@ -7201,7 +7201,7 @@ The condition of an \code{if} must
 be of \BOOLTY{} type and the two branches must have the same type.
 be of \BOOLTY{} type and the two branches must have the same type.
 
 
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Create 10 new test programs in \LangIf{}. Half of the programs should
 Create 10 new test programs in \LangIf{}. Half of the programs should
 have a type error. For those programs, create an empty file with the
 have a type error. For those programs, create an empty file with the
 same base name but with file extension \code{.tyerr}. For example, if
 same base name but with file extension \code{.tyerr}. For example, if
@@ -7617,7 +7617,7 @@ instead of just one (\code{subq}).
 %% memory, which is the primary factor that determines execution time on
 %% memory, which is the primary factor that determines execution time on
 %% modern computer architectures.
 %% modern computer architectures.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Implement the pass \code{shrink} to remove \key{and} and \key{or} from
 Implement the pass \code{shrink} to remove \key{and} and \key{or} from
 the language by translating them to \code{if} expressions in \LangIf{}.
 the language by translating them to \code{if} expressions in \LangIf{}.
@@ -7647,7 +7647,7 @@ Run the script to test your compiler on all the test programs.
 Add cases to \code{uniquify\_exp} to handle Boolean constants and
 Add cases to \code{uniquify\_exp} to handle Boolean constants and
 \code{if} expressions.
 \code{if} expressions.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Update the \code{uniquify\_exp} for \LangIf{} and add the following
 Update the \code{uniquify\_exp} for \LangIf{} and add the following
 entry to the list of \code{passes} in the \code{run-tests.rkt} script.
 entry to the list of \code{passes} in the \code{run-tests.rkt} script.
 \begin{lstlisting}
 \begin{lstlisting}
@@ -7737,7 +7737,7 @@ Atm &::=& \gray{ \INT{\Int} \MID \VAR{\Var} } \MID \BOOL{\itm{bool}}\\
 \end{figure}
 \end{figure}
 
 
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Add cases for Boolean constants and \code{if} to the \code{rco\_atom}
 Add cases for Boolean constants and \code{if} to the \code{rco\_atom}
 and \code{rco\_exp} functions in \code{compiler.rkt}.
 and \code{rco\_exp} functions in \code{compiler.rkt}.
@@ -8525,7 +8525,7 @@ block39:
 \end{center}
 \end{center}
 \fi}
 \fi}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 \racket{
 \racket{
 Implement the pass \code{explicate\_control} by adding the cases for
 Implement the pass \code{explicate\_control} by adding the cases for
 Boolean constants and \key{if} to the \code{explicate\_tail} and
 Boolean constants and \key{if} to the \code{explicate\_tail} and
@@ -8657,7 +8657,7 @@ above but use different suffixes for the conditional jump instruction.
   as an assignment to the \key{rax} register followed by a jump to the
   as an assignment to the \key{rax} register followed by a jump to the
   conclusion of the \code{main} function.}
   conclusion of the \code{main} function.}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Expand your \code{select\_instructions} pass to handle the new
 Expand your \code{select\_instructions} pass to handle the new
 features of the \LangIf{} language.
 features of the \LangIf{} language.
 %
 %
@@ -8774,7 +8774,7 @@ instruction's argument and for computing the variables read-from ($R$)
 or written-to ($W$) by an instruction need to be updated to handle the
 or written-to ($W$) by an instruction need to be updated to handle the
 new kinds of arguments and instructions in \LangXIfVar{}.
 new kinds of arguments and instructions in \LangXIfVar{}.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 {\if\edition\racketEd
 {\if\edition\racketEd
 %
 %
 Update the \code{uncover\_live} pass to apply liveness analysis to
 Update the \code{uncover\_live} pass to apply liveness analysis to
@@ -8814,7 +8814,7 @@ Some instructions, e.g., the \key{movzbq} instruction, require special care,
 similar to the \key{movq} instruction. See rule number 1 in
 similar to the \key{movq} instruction. See rule number 1 in
 Section~\ref{sec:build-interference}.
 Section~\ref{sec:build-interference}.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Update the \code{build\_interference} pass for \LangXIfVar{}.
 Update the \code{build\_interference} pass for \LangXIfVar{}.
 {\if\edition\racketEd
 {\if\edition\racketEd
 Add the following entries to the list of \code{passes} in the
 Add the following entries to the list of \code{passes} in the
@@ -8843,7 +8843,7 @@ one memory reference.
 %
 %
 The second argument of the \key{movzbq} must be a register.
 The second argument of the \key{movzbq} must be a register.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Update \code{patch\_instructions} pass for \LangXIfVar{}.
 Update \code{patch\_instructions} pass for \LangXIfVar{}.
 %  
 %  
@@ -9434,7 +9434,7 @@ block_1:
 %% each block in the program, updating the target of every \code{goto}
 %% each block in the program, updating the target of every \code{goto}
 %% according to the mapping in \code{short-cut}.
 %% according to the mapping in \code{short-cut}.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Implement the improvements to the \code{explicate\_control} pass.
   Implement the improvements to the \code{explicate\_control} pass.
   Check that it removes trivial blocks in a few example programs. Then
   Check that it removes trivial blocks in a few example programs. Then
   check that your compiler still passes all of your tests.
   check that your compiler still passes all of your tests.
@@ -9542,7 +9542,7 @@ block_2:
 \label{fig:remove-jumps}
 \label{fig:remove-jumps}
 \end{figure}
 \end{figure}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 %
 %
 Implement a pass named \code{remove\_jumps} that merges basic blocks
 Implement a pass named \code{remove\_jumps} that merges basic blocks
 into their preceding basic block, when there is only one preceding
 into their preceding basic block, when there is only one preceding
@@ -12519,7 +12519,7 @@ mark. The following example uses \code{set-point-x!} to change the
 \end{lstlisting}
 \end{lstlisting}
 \end{center}
 \end{center}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Create a type checker for \LangStruct{} by extending the type
   Create a type checker for \LangStruct{} by extending the type
   checker for \LangVec{}. Extend your compiler with support for simple
   checker for \LangVec{}. Extend your compiler with support for simple
   structures, compiling \LangStruct{} to x86 assembly code. Create
   structures, compiling \LangStruct{} to x86 assembly code. Create
@@ -12850,7 +12850,7 @@ Finally, the instructions for \code{any-vectorof-length} should be
 similar to those for \code{vectorof-length}, except that one must
 similar to those for \code{vectorof-length}, except that one must
 first project the array by writing zeroes into the $3$-bit tag
 first project the array by writing zeroes into the $3$-bit tag
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 
 
 Implement a compiler for the \LangArray{} language by extending your
 Implement a compiler for the \LangArray{} language by extending your
 compiler for \LangLoop{}. Test your compiler on a half dozen new
 compiler for \LangLoop{}. Test your compiler on a half dozen new
@@ -12929,7 +12929,7 @@ be added to the set. Also, if the value being overwritten was a
 pointer into the new generation, then that pointer should be removed
 pointer into the new generation, then that pointer should be removed
 from the set.
 from the set.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Adapt the \code{collect} function in \code{runtime.c} to implement
   Adapt the \code{collect} function in \code{runtime.c} to implement
   generational garbage collection, as outlined in this section.
   generational garbage collection, as outlined in this section.
   Update the code generation for \code{vector-set!} to implement
   Update the code generation for \code{vector-set!} to implement
@@ -14391,7 +14391,7 @@ The conclusion of every function should do the following.
 \end{enumerate}
 \end{enumerate}
 
 
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Expand your compiler to handle \LangFun{} as outlined in this chapter.
 Expand your compiler to handle \LangFun{} as outlined in this chapter.
 Create 5 new programs that use functions, including examples that pass
 Create 5 new programs that use functions, including examples that pass
 functions and return functions from other functions, recursive
 functions and return functions from other functions, recursive
@@ -15891,7 +15891,7 @@ def main() -> int:
 \label{fig:lexical-functions-example}
 \label{fig:lexical-functions-example}
 \end{figure}
 \end{figure}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Expand your compiler to handle \LangLam{} as outlined in this chapter.
 Expand your compiler to handle \LangLam{} as outlined in this chapter.
 Create 5 new programs that use \key{lambda} functions and make use of
 Create 5 new programs that use \key{lambda} functions and make use of
 lexical scoping. Test your compiler on these new programs and all of
 lexical scoping. Test your compiler on these new programs and all of
@@ -16181,7 +16181,7 @@ operator in a direct call, then we say that the function
 \emph{escapes}. If a global function does not escape, then we do not
 \emph{escapes}. If a global function does not escape, then we do not
 need to perform closure conversion on the function.
 need to perform closure conversion on the function.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Implement an auxiliary function for detecting which global
   Implement an auxiliary function for detecting which global
   functions escape. Using that function, implement an improved version
   functions escape. Using that function, implement an improved version
   of closure conversion that does not apply closure conversion to
   of closure conversion that does not apply closure conversion to
@@ -16278,7 +16278,7 @@ a \racket{\code{let}}\python{assignment}, mapping the variable to the
 name of the global function for the closure. This pass should come
 name of the global function for the closure. This pass should come
 after closure conversion.
 after closure conversion.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Implement a compiler pass, named \code{optimize\_known\_calls}, that
 Implement a compiler pass, named \code{optimize\_known\_calls}, that
 compiles known calls into direct calls. Verify that your compiler is
 compiles known calls into direct calls. Verify that your compiler is
 successful in this regard on several example programs.
 successful in this regard on several example programs.
@@ -18124,7 +18124,7 @@ other kinds of values.
 %% programs.
 %% programs.
 %% \end{exercise}
 %% \end{exercise}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
 Expand your compiler to handle \LangDyn{} as outlined in this chapter.
 Expand your compiler to handle \LangDyn{} as outlined in this chapter.
 Create tests for \LangDyn{} by adapting ten of your previous test programs
 Create tests for \LangDyn{} by adapting ten of your previous test programs
 by removing type annotations. Add 5 more tests programs that
 by removing type annotations. Add 5 more tests programs that
@@ -19260,7 +19260,7 @@ movq %rax, |$\itm{lhs'}$|
 The \code{any-vector-set!} and \code{any-vector-length} operators can
 The \code{any-vector-set!} and \code{any-vector-length} operators can
 be translated in a similar way.
 be translated in a similar way.
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Implement a compiler for the gradually-typed \LangGrad{} language by
   Implement a compiler for the gradually-typed \LangGrad{} language by
   extending and adapting your compiler for \LangLoop{}. Create 10 new
   extending and adapting your compiler for \LangLoop{}. Create 10 new
   partially-typed test programs. In addition to testing with these
   partially-typed test programs. In addition to testing with these
@@ -19944,7 +19944,7 @@ annotations and the body.
 (Def |$f$| ([|$x_1$| : |$T'_1$|] |$\ldots$|) |$T'_r$| |$\itm{info}$| |$e'$|)
 (Def |$f$| ([|$x_1$| : |$T'_1$|] |$\ldots$|) |$T'_r$| |$\itm{info}$| |$e'$|)
 \end{lstlisting}
 \end{lstlisting}
 
 
-\begin{exercise}\normalfont
+\begin{exercise}\normalfont\normalsize
   Implement a compiler for the polymorphic language \LangPoly{} by
   Implement a compiler for the polymorphic language \LangPoly{} by
   extending and adapting your compiler for \LangGrad{}. Create 6 new test
   extending and adapting your compiler for \LangGrad{}. Create 6 new test
   programs that use polymorphic functions. Some of them should make
   programs that use polymorphic functions. Some of them should make