Tuesday, November 01, 2011

Haskell | Beispiele zu Matrizen und Vektoren

Schreiben Sie folgende Haskell-Rechenvorschriften:
1. Eine Haskell-Rechenvorschrift:
anp1 :: [[Integer]] -> Matrix
Angewendet auf ein Argument L liefert anp1 als Resultat einen Wert M vom Typ Matrix ab, in dem alle Komponentenlisten von L bis zur Länge l der längsten Komponentenliste am Ende mit Nullen aufgefüllt sind. Die längste(n) Komponentenliste(n) bleibt/en unverändert. Auf diese Weise liefert anp1 eine Matrix vom Typ  (lengthL, l) ab. Ist L die leere Liste, ist das Result von anp1 der Wert [[1]]. Folgende Beispiele illustrieren das gewünschte Ein-/Ausgabeverhalten:

anp1 [] == [[1]]
anp1 [[1,2,3],[1,2],[1,2,3,4,5],[1]] == [[1,2,3,0,0],[1,2,0,0,0],[1,2,3,4,5],[1,0,0,0,0]]
anp1 [[1,2,3],[4,5,6]] == [[1,2,3],[4,5,6]]


Lösung

type Matrix = [[Integer]]
anp1 :: [[Integer]] -> Matrix
anp1 [] = [[1]]
anp1 compLists = [x ++ replicate (maxLength - length x) 0 | x <- compLists]
where maxLength = maximum (map length compLists)
view raw ListToMatrix.hs hosted with ❤ by GitHub