EECS 321 Programming Languages: Homework 4

Due: Friday, February 3rd, 2012, noon

Part 1 – Functions that accept multiple arguments (with deferred substitutions)

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.

Part 2 – Conditionals

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)```

Part 3 – Negative predicate

Implement, in the FnWAE language (without any extensions), 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).

Part 4 – Multiplication on integers

Implement, in the FnWAE language (without any extensions), a function mult that computes the product of two integers.

`  {deffun {mult x y} ...}`

Part N – Handin instructions

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 17th, 2012robby@eecs.northwestern.edu