Diagonales invertidas
Definir la función
| 
					 1  | 
						   diagonalesInvertidas :: Matrix a -> Matrix a  | 
					
tal que (diagonalesInvertidas q) es la matriz obtenida invirtiendo el orden de los elementos de la diagonal principal y de la diagonal secundaria de q. Por ejemplo,
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28  | 
						   λ> fromList 5 5 [1..]    ┌                ┐    │  1  2  3  4  5 │    │  6  7  8  9 10 │    │ 11 12 13 14 15 │    │ 16 17 18 19 20 │    │ 21 22 23 24 25 │    └                ┘    λ> diagonalesInvertidas (fromList 5 5 [1..])    ┌                ┐    │ 25  2  3  4 21 │    │  6 19  8 17 10 │    │ 11 12 13 14 15 │    │ 16  9 18  7 20 │    │  5 22 23 24  1 │    └                ┘    λ> fromList 3 3 ['a','b'..]    ┌             ┐    │ 'a' 'b' 'c' │    │ 'd' 'e' 'f' │    │ 'g' 'h' 'i' │    └             ┘    λ> diagonalesInvertidas (fromList 3 3 ['a','b'..])    ┌             ┐    │ 'i' 'b' 'g' │    │ 'd' 'e' 'f' │    │ 'c' 'h' 'a' │    └             ┘  | 
					
| 
					 1 2 3 4 5 6 7 8  | 
						import Data.Matrix diagonalesInvertidas :: Matrix a -> Matrix a diagonalesInvertidas q = matrix n n f   where n = nrows q         f (i,j) | i == j     = q ! (n + 1 - i, n + 1 - i)                 | i+j == n+1 = q ! (j,i)                 | otherwise  = q ! (i,j)  | 
					
Otras soluciones
- Se pueden escribir otras soluciones en los comentarios.
 - El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
 
Soluciones
Pensamiento
«No estamos muy contentos cuando nos vemos obligados a aceptar una verdad matemática en virtud de una complicada cadena de conclusiones formales y cálculos, que atravesamos a ciegas, eslabón por eslabón, sintiendo nuestro camino por el tacto. Queremos primero una visión general del objetivo y del camino; queremos entender la idea de la prueba, el contexto más profundo.»