EECS 395 Programming Languages: Homework 4

Due: Wednesday, January 27th, 2010, 5pm

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.


  (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, 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, a function mult that computes the product of two integers.

  {deffun {mult x y} ...}

Part N – Handin instructions

The final program you handin should:

Last update: Monday, January 25th, 2010