[Solved] CS320 Homework #2-MUWAE

$25

File Name: CS320_Homework__2_MUWAE.zip
File Size: 216.66 KB

SKU: [Solved] CS320 Homework #2-MUWAE Category: Tag:
5/5 - (1 vote)

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

1 Supporting Multi-Value

The first thing we should fix is that were 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) }

Dont 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 youre 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))

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

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[Solved] CS320 Homework #2-MUWAE[Solved] CS320 Homework #2-MUWAE
$25