

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 objectoriented 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]"

