Extend the interpreter from part one of this assignment to deal with
recursion. Do this by introducing letrec expressions to handle
recursion with the following syntax (as in scheme)
EXP ::== (letrec DECLS EXP)
DECLS ::== (DECL+)
DECL ::== (VAR EXP)
This is almost exactly the same syntax as let expressions, the
difference being that the EXP field of a DECL must be a proc
expression. However, evaluating letrec expressions is quite a
bit different from evaluating let expressions! This part
corresponds to exercise 5.6.2.
You
will have to extend the parser to handle letrec expressions.
For compatibility, your parser must create records of the type
(define-record letrec (decls body)). decls are
made up of decl records that are exactly the same as those
defined in our
parser for let expressions.