Computer Science Department
Programming Methods Laboratory

Foundations of Programming
Ecole Polytechnique Federale de Lausanne
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]"