**Due: Saturday, February 5th, 2011, noon**

Just like part 1 of homework 3, add multiple argument functions, but this time add them to the interpreter with deferred substitutions.

*Do not add rec or get.*

Add `if0`, conditional expression. It has three subexpressions:

<FnWAE> = ... | {if0 FnWAE FnWAE FnWAE}

Evaluating an `if0` expression evaluates the first subexpression; if it produces `0`, then the result of the entire expression is the result of the second subexpression. otherwise, the result is the result of the third subexpression.

Examples:

(test (interp-expr (parse '{if0 0 1 2}) '()) 1) (test (interp-expr (parse '{if0 1 2 3}) '()) 3)

Implement, in the FnWAE language, a predicate `neg?` that determines if an integer is negative.

{deffun {neg? x} ...}

It must return either `0` (if the input is negative), or `1` (if not).

Implement, in the FnWAE language, a function `mult` that computes the product of two integers.

{deffun {mult x y} ...}

The final program you handin should:

- have a definition of
`interp-expr`that supports both`if0`and multi-arity functions. - have both
`parse`and`parse-defn`that parse FnWAE as above - have a PLAI-level definition of
`mult-and-neg-deffuns`that is bound to a list of (unparsed) deffuns that contains both`neg?`and`mult`as well as any helper functions you wish.(define mult-and-neg-deffuns (list `{deffun {neg? x} ...} `{deffun {mult x y} ...} ;; other deffuns okay, too ))

- not have any unused code (i.e., no
`subst`and no code for records)

Last update: Friday, February 4th, 2011robby@eecs.northwestern.edu |