The purpose of this problem is to develop a CEK machine for the
ISWIM*s language from problem set 6.
Task 1
Encode your CEK machine in Redex.
Task 2
Define the cek function, which uses the CEK machine to
map ISWIM*s programs to answers.
Task 3
Formulate a conjecture about the relationship between eval*-s
(solution for problem set 6, imported from 8provided.rkt) and
cek as a metafunction. Test the conjecture manually and with
redex-check.
You must think of the imported solution as the "weather" and your own
model as a "weatherman". As you explore your solution, keep in mind that
you can't change the weather.
If testing finds a counter-example to your conjecture, formulate the
counter-example as a failing test case and explain the failure with a
one-line comment. Then fix those parts of your solution that broke so that
the test case passes.
Task 4 Add the following exception handling mechanism
to the CEK machine for ISWIM*s:
e = ... | (handle e x e) | (raise x e)
x in Variables
We say that a (raise x e_x) expressions raises an exception
with tag x and exception code e_x. A
(handle e_body x e_handler) expression sets up an exception
handler for exceptions with tag x and then evaluates
e_body. If the evaluation produces a value, the value is the
result of the handle expression. If the evaluation of
e_body raises an exception with tag x and
exception code e_x, then the handler expression
evaluates (e_handler e_x).