-- | -- Module : Amplia_columnas -- Description : Ampliación de las columnas de una matriz. -- Copyright : Exercitium (16-05-14) -- License : GPL-3 -- Maintainer : JoseA.Alonso@gmail.com -- -- Las matrices enteras se pueden representar mediante tablas con -- índices enteros: -- -- > type Matriz = Array (Int,Int) Int -- -- Definir la función -- -- > ampliaColumnas :: Matriz -> Matriz -> Matriz -- -- tal que __(ampliaColumnas p q)__ es la matriz construida añadiendo las -- columnas de la matriz q a continuación de las de p (se supone que -- tienen el mismo número de filas). Por ejemplo, si p y q representan -- las dos primeras matrices, entonces (ampliaColumnas p q) es la -- tercera -- -- > |0 1| |4 5 6| |0 1 4 5 6| -- > |2 3| |7 8 9| |2 3 7 8 9| -- -- En Haskell, -- -- >>> let p = listArray ((1,1),(2,2)) [0..3] -- >>> let q = listArray ((1,1),(2,3)) [4..9] -- >>> elems (ampliaColumnas p q) -- [0,1,4,5,6,2,3,7,8,9] -- >>> bounds (ampliaColumnas p q) -- ((1,1),(2,5)) module Amplia_columnas where import Data.Array -- | Tipo de las matrices. type Matriz = Array (Int,Int) Int -- | Definición. ampliaColumnas :: Matriz -> Matriz -> Matriz ampliaColumnas p1 p2 = array ((1,1),(m,n1+n2)) [((i,j), f i j) | i <- [1..m], j <- [1..n1+n2]] where ((_,_),(m,n1)) = bounds p1 ((_,_),(_,n2)) = bounds p2 f i j | j <= n1 = p1!(i,j) | otherwise = p2!(i,j-n1)