Representaciones de matrices
Las matrices se pueden representar de distintas formas. Por ejemplo, la matriz
|7 5 6| |1 9 4|
se puede representar como la terna
([7,5,6,1,9,4],2,3)
(donde la primera componente es la lista de los elementos de matriz, la segunda es su número de filas y la tercera es su número de columnas) y también se puede representar como una lista de listas
[[[7,5,6],[1,9,4]]
(donde cada elemento es una de las filas de la matriz).
Definir las funciones
ternaAlistas :: ([a],Int,Int) -> [[a]] listasAterna :: [[a]] -> ([a],Int,Int)
tales que ternaAlistas pase de la primera representación a la segunda y listasAterna pase de la segunda a la primera. Por ejemplo,
ternaAlistas ([7,5,6,1,9,4],2,3) == [[7,5,6],[1,9,4]] listasAterna [[7,5,6],[1,9,4]] == ([7,5,6,1,9,4],2,3) ternaAlistas ([7,5,6,1,9,4],3,2) == [[7,5],[6,1],[9,4]] listasAterna [[7,5],[6,1],[9,4]] == ([7,5,6,1,9,4],3,2)
Soluciones
ternaAlistas :: ([a],Int,Int) -> [[a]] ternaAlistas (xs,n,m) = aux xs where aux [] = [] aux xs = take m xs : aux (drop m xs) listasAterna :: [[a]] -> ([a],Int,Int) listasAterna xss = (concat xss, length xss, length (head xss))