## CS 2420-20 Homework 14

Due: Thursday, March 8th, 2012 9:10am

*This assignment is essentially the same as HW 13, but using the
interpreter with environments.*

### Part 1 – Testing Numbers

Start with miniracket3.rkt (same password as before).

Add support for booleans as values and expressions, and also add an `iszero`
form that has a single sub-expression. If the value of the `iszero`
sub-expression is `0`, then the result should be true. If the value of the
sub-expression is any other number, then the result should be false.

For example, assuming that you name the new expression structure `iszero`,
`(evaluate (make-iszero (make-minus 7 7)) empty (hash))` should produce
`#t` — assuming that your representation of a boolean value is a Racket boolean — while
`(evaluate (make-iszero (make-plus 7 7)) empty (hash))` should produce
`#f`.

### Part 2 – Adding Conditionals

Add an `if` form to the language. You will need to name the
structure for `if` forms something other than `if`, perhaps
`branch`.

For example, assuming that you name the new expression structure `branch`
and that you represent Mini Racket booleans using Racket booleans, then
`(evaluate (make-branch (make-iszero 0) 1 0) empty (hash))` should produce `1`,
while `(evaluate (make-branch (make-iszero 6) 1 0) empty (hash))` should produce `0`.

As an extended example,

(evaluate (make-app 'fact 6)
empty
(hash 'fact
(make-function 'n
(make-branch (make-iszero 'n)
1
(make-times 'n (make-app 'fact
(make-minus 'n 1))))
empty)))

should produce `720`.

Last update: Wednesday, March 7th, 2012mflatt@cs.utah.edu |