Optional extension.

All parts due: NOON on Sunday, May 11th

All parts due: NOON on Sunday, May 11th

Notes about extensions

Extension A, like other extensions which will be provided, serves three purposes. The extensions will...

- ...give you a much more detailed understanding of the material.
- ...make your interpreter more complete.
- ...provide you a chance to earn some extra credit.

You may attempt to complete the Extensions at any point during the
project. You do not need to attempt them after a specific required
portion of the project. In addition, you should not run
`handin37` separately to hand in an extension: simply hand in
the extension along with the whatever section you are handing in.

Finally, since these extensions are considered "advanced" features, you will receive far less guidance in completing them than you will receive for the required portions of the project. This does not mean that you cannot ask questions; rather, I will provide less information to you up front, forcing you to work out details on your own.

Implementing **quasiquote** and **unquote**

It is largely up to you to work out the details in this section, and to test it thoroughly. You should find portions of the code here look similar to the work you have already done.

Here are a few brief details about `quasiquote` and `unquote`:

- The syntax is of
`quasiquote`is`(quasiquote`which can be abbreviated as*expr*)```.*expr* - The syntax is of
`unquote`is`(unquote`which can be abbreviated as*expr*)`,`.*expr* `(unquote`can only appear inside of a quasiquoted expression.*expr*)- If the quasiquoted expression contains no unquoted
sub-expressions, then
`(quasiquote`is equivalent to*expr*)`(quote`.*expr*) - If an
`(unquote`appears in a quasiquoted expression, then*expr*)`(unquote`is replaced by the evaluated expression*expr*)*expr*. - If a
`(quasiquote`appears in a quasiquoted expression, it is unchanged.*expr*)

Here are some interactions in Racket:

> (define a 3) > (define b 4) > ,a ; rule 3Be sure you try other combinations to make sure you understand howunquote: not in quasiquotein: (unquote b) > '(+ a b) (+ a b) > `(+ a b) ; rule 4 (+ a b) > `(+ ,a ,b) ; rule 5 (+ 3 4) > `(+ `(+ ,a ,b) ,b) ; rule 6 (+ `(+ ,a ,b) 4) > `,`,`,a 3

Extension A may be completed at any stage of the final project and does not need to be turned in separately.