CS Homework 2: MUWAE Solution

$30.00 $24.00

The goal of Homework #2 is to implement the interpreter of MUWAE, which is the extended version of WAE that deals with multiple values. Supporting Multi-Value The first thing we should fix is that we’re still define a Num with a single numeric value and use it as the result of run. One way to…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Description

5/5 – (2 votes)

The goal of Homework #2 is to implement the interpreter of MUWAE, which is the extended version of WAE that deals with multiple values.

  • Supporting Multi-Value

The first thing we should fix is that we’re still define a Num with a single numeric value and use it as the result of run.

One way to resolve this would be to add a new case class called Nums to our AST definition. But this would require reworking new cases for it in a few places. So instead, we will choose an easier solution: just change the existing Num so instead of holding a single integer it will hold a List[Int].

We need to fix the arithmetic operators. This is a bit tricky, since each of them receives two inputs that are both lists, and they should apply the operator on each pair from these two inputs, and collect a list of all of the results. So to make it easy, here is a skeleton of a utility function that will do this work. It is near-complete, and you have a tiny hole to fill:

  • applies a binary numeric function on all combinations of integers from

  • the two input lists, and return the list of all of the results

def binOp(

op: (Int, Int) => Int,

ls: List[Int],

rs: List[Int]

): List[Int] = ls match {

case Nil => Nil

case l :: rest =>

def f(r: Int): Int = ??? // TODO: complete this function rs.map(f) ++ binOp(op, rest, rs)

}

Don’t forget to add tests that demonstrate that this works: that using with to bind a name to a multi-valued expression works as expected. Here are some tests that should work once you’re done with this part:

test(run(“{+ 3 7}”), List(10))

test(run(“{- 10 {3 5}}”), List(7, 5))

test(run(“{with {x {+ 5 5}} {+ x x}}”), List(20))

  • Adding More Arithmetic Operators

Next, add two arithmetic operators, min and max that take three expressions and return the minimum and the maximum list of integers, respectively, to MUWAE:

test(run(“{min 3 4 5}”), List(3))

test(run(“{max {+ 1 2} 4 5}”), List(5))

test(run(“{min {1 4} {2 9} 3}”), List(1, 1, 2, 3))

1

test(run(“{max {1 6} {2 5} {3 4}}”), List(3, 4, 5, 5, 6, 6, 6, 6))

2

CS Homework 2: MUWAE Solution
$30.00 $24.00