Librería Data.Array

Este documento es un resumen del contenido de la librería Data.Array. Una descripción detallada de todo el contenido de dicha librería se puede encontrar en https://hackage.haskell.org/package/array/docs/Data-Array.html

La librería Data.Array contiene el tipo de dato Array o tabla, que sirve para almacenar una cantidad prefijada de objetos del mismo tipo accesibles mediante un índice. Un índice es un par formado por el primer elemento y el último elemento que se utilizan para acceder a los elementos de la tabla.

Funciones para la creación de tablas

array :: Ix i => (i, i) -> [(i, e)] -> Array i e
(array (i,j) ivs) construye una tabla de valores accesibles mediante un índice comprendido entre i y j. Los valores de la tabla se proporcionan como una lista de pares ivs formados por el valor en el rango del índice y el valor que se debe almacenar en la tabla.
 > array (1,5) [(i,i^2) | i <- [1..5]]
array (1,5) [(1,1),(2,4),(3,9),(4,16),(5,25)]
 > array ((1,1),(2,2)) [((i,j),i+j) | i <- [1..2], j <- [1..2]]
array ((1,1),(2,2)) [((1,1),2),((1,2),3),((2,1),3),((2,2),4)]
listArray :: Ix i => (i, i) -> [e] -> Array i e
(listArray (i,j) vs) construye una tabla de valores accesibles mediante un índice comprendido entre i y j. Los valores de la tabla se proporcionan como una lista vs en el orden en que están asociados a los valores del índice.
 > listArray (1,5) [1,4,9,16,25]
array (1,5) [(1,1),(2,4),(3,9),(4,16),(5,25)]
 > listArray ((1,1),(2,2)) [2,3,3,4]
array ((1,1),(2,2)) [((1,1),2),((1,2),3),((2,1),3),((2,2),4)]

Funciones para acceder a la información de las tablas

bounds :: Array i e -> (i,i)
(bounds a) devuelve los límites del índice de la tabla a, un par formado por el límite inferior y el límite superior
 > bounds (array (1,5) [(i,i^2) | i <- [1..5]])
(1,5)
bounds (listArray ((1,1),(2,2)) [2,3,3,4])
((1,1),(2,2))
indices :: Ix i => Array i e -> [i]
(indices a) devuelve una lista con todos los valores del índice de la tabla a, ordenados desde el límite inferior hasta el superior
 > indices (array (1,5) [(i,i^2) | i <- [1..5]])
[1,2,3,4,5]
 > indices (listArray ((1,1),(2,2)) [2,3,3,4])
[(1,1),(1,2),(2,1),(2,2)]
elems :: Array i e -> [e]
(elems a) devuelve una lista con todos los valores de la tabla a, ordenados según el valor de su índice.
 > elems (array (1,5) [(i,i^2) | i <- [1..5]])
[1,4,9,16,25]
 > elems (listArray ((1,1),(2,2)) [2,3,3,4])
[2,3,3,4]
assocs :: Ix i => Array i e -> [(i,e)]
(assocs a) devuelve una lista con todas las parejas formadas por índices de la tabla a y el valor que almacena, ordenados según el valor del índice.
 > assocs (array (1,5) [(i,i^2) | i <- [1..5]])
[(1,1),(2,4),(3,9),(4,16),(5,25)]
 > assocs (listArray ((1,1),(2,2)) [2,3,3,4])
[((1,1),2),((1,2),3),((2,1),3),((2,2),4)]
! :: Ix i => Array i e -> i -> e
(a ! i) devuelve el valor de la tabla a que se encuentra en el valor del índice i.
 > (array (1,5) [(i,i^2) | i <- [1..5]]) ! 2
4
 > (listArray ((1,1),(2,2)) [2,3,3,4]) ! (1,2)
3