Computer Science Department Programming Methods Laboratory Foundations of Programming
Exercises 2
22/03/2001

In functional programming languages, matrices are often implemented as lists of rows, where each row is itself a list of values. The matrix

would be encoded like this:

```[[x11, x12, x13], [x21, x22, x23]]
```
Implement support for matrices and vectors in Funnel. Your abstraction should at least include the following functions operating on matrices and vectors:
• `scalarprod` computes the scalar product of two vectors,
• `transpose` transposes a given matrix,
• `add` adds two matrices, and
• `mult` multiplies two matrices
You can copy a framework for this exercise from the following location: `/home/linuxsoft/funnel/lecture/Matrix.fn`. You should also copy `.../lecture/List.fn`, `.../lecture/String.fn`, `.../lecture/Java.fn` and `.../lecture/Console.fn`. This framework loads a predefined list type, so that all important list operations can be used easily. This implementation of lists uses an object-oriented style. Here is a transcript of a funni session: `funni -untyped List.fn`
```> with List: ListModule
()
> val l1 = Cons(1, Cons(2, Cons(3, Nil)))
'val l1 = '
> l1.toString
"[1, 2, 3]"
> val l2 = 1 :: 2 :: 3 :: Nil
'val l2 = '
> l2.toString
"[1, 2, 3]"
> l1.append(l2).toString
"[1, 2, 3, 1, 2, 3]"
> l1.append(l2).map(x|"number " + x).toString
"[number 1, number 2, number 3, number 1, number 2, number 3]"

```