En este manual se presentan ejemplos de las funciones de la librería de conjuntos Data.Vector 0.10.9.1. En los ejemplos se supone que se han importado la siguiente librería
ghci> import Data.Vector as V
(Vector a)
es el tipo de los vectores cuyos elementos son de tipo a. Por ejemplo,ghci> :set +t
ghci> generate 5 (*2)
fromList [0,2,4,6,8]
it :: Vector Int
ghci> generate 5 (\i -> if even i then True else False)
fromList [True,False,True,False,True]
it :: Vector Bool
(length v)
es la longitud del vector v. Por ejemplo,ghci> V.length (generate 5 (*2))
5
(null v)
se verifica si v es el vector vacío. Por ejemplo,ghci> V.null (generate 0 (*2))
True
ghci> V.null (generate 5 (*2))
False
(v ! i)
es el elemento i-ésimo del vector v. Por ejemplo,ghci> generate 5 (*2) ! 3
6
ghci> generate 5 (*2) ! 7
*** Exception: ./Data/Vector/Generic.hs:249 ((!)): index out of bounds (7,5)
(v !? i)
es justo el elemento i-ésimo del vector v si está en el rango de v, o Nothing
en caso contrario . Por ejemplo,ghci> generate 5 (*2) !? 3
Just 6
ghci> generate 5 (*2) !? 7
Nothing
(head v)
es el primer elemento del vector v. Por ejemplo,ghci> V.head (generate 5 (*2))
0
(last v)
es el último elemento del vector v. Por ejemplo,ghci> V.last (generate 5 (*2))
8
(slice i n v)
es el subvector de v que comienza en el elemento i-ésimo y tiene longitud n. Por ejemplo,ghci> slice 2 3 (generate 10 id)
fromList [2,3,4]
ghci> slice 2 3 (fromList [0..10])
fromList [2,3,4]
ghci> slice 9 3 (fromList [0..10])
fromList *** Exception: ./Data/Vector/Generic.hs:400 (slice): invalid slice (9,3,11)
(init v)
es el vector formado por los elementos de v, salvo el último. Por ejemplo,ghci> V.init (generate 5 (*2))
fromList [0,2,4,6]
ghci> V.init (fromList [0..5])
fromList [0,1,2,3,4]
(tail v)
es el vector formado por los elementos de v, salvo el primero. Por ejemplo,ghci> V.tail (generate 5 (*2))
fromList [2,4,6,8]
ghci> V.tail (fromList [0..5])
fromList [1,2,3,4,5]
(take n v)
es el vector formado por los n primeros elementos de v. Por ejemplo,ghci> V.take 3 (generate 5 (*2))
fromList [0,2,4]
ghci> V.take 3 (fromList [0..5])
fromList [0,1,2]
(drop n v)
es el vector obtenido elimando los n primeros elementos de v. Por ejemplo,ghci> V.drop 3 (generate 5 (*2))
fromList [6,8]
ghci> V.drop 3 (fromList [0..5])
fromList [3,4,5]
(splitAt n v)
es el par formado por el vector de los n primeros elementos de v y los restantes. Por ejemplo,ghci> V.splitAt 3 (generate 5 (*2))
(fromList [0,2,4],fromList [6,8])
ghci> V.splitAt 3 (fromList [0..5])
(fromList [0,1,2],fromList [3,4,5])
empty
es el vector vacío. Por ejemplo,ghci> empty
fromList []
(singleton x)
es el vector cuyo único elemento es x. Por ejemplo,ghci> singleton 5
fromList [5]
(replicate n x)
es el vector de longitud n cuyos elementos son iguales a x. Por ejemplo,ghci> V.replicate 3 5
fromList [5,5,5]
(generate n f)
es el vector de longitud n tal que el valor de su elemento i-ésimo es f(i). Por ejemplo,ghci> generate 5 (*2)
fromList [0,2,4,6,8]
(iterateN n f x)
es el vector de longitud n cuyos elementos son x, f(x), f(f(x)), ... Por ejemplo,ghci> iterateN 5 (*2) 1
fromList [1,2,4,8,16]
ghci> iterateN 5 (+2) 0
fromList [0,2,4,6,8]
(unfoldr f x)
, donde f es la función
f y | p y = Nothing
| otherwise = Just (g y, h y)
es el vector [g x, g (h x), g (h (g (h x))), ...] hasta un elemento que cumpla la propiedad p. Por ejemplo,
ghci> unfoldr (\n -> if n == 0 then Nothing else Just (2*n,n-1)) 5
fromList [10,8,6,4,2]
(unfoldrN n f x)
, donde f es la función
f y = Just (g y, h y)
es el vector [g x, g (h x), g (h (g (h x))), ...] de longitud menor o igual que n. Por ejemplo,
ghci> unfoldrN 3 (\n -> Just (2*n,n-1)) 10
fromList [20,18,16]
(constructN n f)
es el vector con n elementos aplicando f a la parte construida. Por ejemplo,ghci> constructN 3 V.length
fromList [0,1,2]
(constructrN n f)
es el vector con n elementos aplicando f a la parte construida, de dercha a izquierda. Por ejemplo,ghci> constructrN 3 V.length
fromList [2,1,0]
(enumFromN x n)
es el vector cuyos elementos son x, x+1, ..., x+n. Por ejemplo,ghci> enumFromN 5 3
fromList [5,6,7]
(enumFromStepN x y n)
es el vector de longitud n cuyos elementos son x, x+y, x+2*y, ... Por ejemplo,ghci> enumFromStepN 1 2 5
fromList [1,3,5,7,9]
(enumFromTo x y)
es el vector de los elementos desde x a y. Por ejemplo,ghci> V.enumFromTo 2 7
fromList [2,3,4,5,6,7]
ghci> V.enumFromTo 'b' 'd'
fromList "bcd"
(enumFromThenTo x y z)
es el vector cuyos elementos son [x,x+d,x+2*d,...], donde d es y-x, mientras es menor o igual que z. Por ejemplo,ghci> V.enumFromThenTo 1 4 10
fromList [1,4,7,10]
(cons x v)
es el vector obtenido añadiendo al inicio del vector v el elemento x. Por ejemplo,ghci> cons 7 (fromList [3,2,5])
fromList [7,3,2,5]
(snoc v x)
es el vector obtenido añadiendo al final del vector v el elemento x. Por ejemplo,ghci> snoc (fromList [3,2,5]) 7
fromList [3,2,5,7]
(v1 ++ v2)
es el vector obtenido concatenando los elementos de v1 y v2. Por ejemplo,ghci> (fromList [2,3]) V.++ (fromList [7,5,9])
fromList [2,3,7,5,9]
(concat vs)
es la concatenación de los vectores de la lista vs. Por ejemplo,ghci> V.concat [fromList [2,3], fromList [5], fromList [3,7]]
fromList [2,3,5,3,7]
(v // ps)
es el vector obtenido sustituyendo los elementos cuyos índices son las primeras componentes de ps por las segundas. Por ejemplo,ghci> fromList [3,5,2] // [(2,1),(0,7)]
fromList [7,5,1]
(update v1 v2)
es el vector obtenido a partir de v1 de forma que para cada elemento (i,a) de v2 se sustituye el elemento i-ésimo de v1 por a. Por ejemplo,ghci> update (fromList [3,5,2]) (fromList [(2,1),(0,7)])
fromList [7,5,1]
(update_ v1 v2 v3)
es equivalente a (update v1 (zip v2 v3)). Por ejemplo,ghci> update_ (fromList [3,5,2]) (fromList [2,0]) (fromList [1,7])
fromList [7,5,1]
(accum f v ps)
es el vector cuyo i-ésimo elemento se obtiene aplicando la operación f al i-ésimo elemento de v y a todos las segundas componentes de los pares de ps cuya primera componente es i. Por ejemplo,ghci> accum (+) (fromList [5,9,2]) [(2,1),(1,6),(0,3),(1,4)]
fromList [8,19,3]
(accumulate f v1 v2)
es el vector cuyo i-ésimo elemento se obtiene aplicando la operación f a i-ésimo elemento de v1 y a todos las segundas componentes de los pares de v2 cuya primera componente es i. Por ejemplo,ghci> accumulate (+) (fromList [5,9,2]) (fromList [(2,1),(1,6),(0,3),(1,4)])
fromList [8,19,3]
(accumulate_ f v1 v2 v3)
es equivalente a (accumulate f v1 (zip v2 v3)). Por ejemplo,ghci> accumulate_ (+) (fromList [5,9,2]) (fromList [2,1,0,1]) (fromList [1,6,3,4])
fromList [8,19,3]
(reverse v)
es el inverso del vector v. Por ejemplo,ghci> V.reverse (fromList [3,2,5])
fromList [5,2,3]
(backpermute v1 v2)
es el vector obtenido sustituyendo el elemento i de v2 por el i-ésimo elemento de v1, para todos los índices. Por ejemplo,ghci> backpermute (fromList "abcd") (fromList [0,3,2,3,1,0])
fromList "adcdba"
(indexed v)
es el vector cuyo i-ésimo elemento es (i,a) donde a es el i-ésimo elemento de v. Por ejemplo,ghci> indexed (fromList [4,5,7])
fromList [(0,4),(1,5),(2,7)]
(map f v)
es el vector cuyos elementos se obtienen aplicando f a los elementos de v. Por ejemplo,ghci> V.map (*2) (fromList [4,5,7])
fromList [8,10,14]
(imap f v)
es el vector cuyo i-ésimo elemento es (f i a), donde a es el i-ésimo elemento de v. Por ejemplo,ghci> imap (*) (fromList [4,5,2,3])
fromList [0,5,4,9]
(concatMap f v)
es el vector obtenido aplicando f a los elementos de v y concatenando los resultados. Por ejemplo,ghci> V.concatMap (\(i,x) -> V.replicate i x) (fromList [(3,'a'),(2,'c')])
fromList "aaacc"
(zip v1 v2)
es el vector obtenido emparejando los elementos de v1 y v2. Por ejemplo,ghci> V.zip (fromList [3,2,5]) (fromList [1,0,7])
fromList [(3,1),(2,0),(5,7)]
zip3
, zip4
, zip5
, zip6
son análogas a zip.
(zipWith f v1 v2)
es el vector cuyo i-ésimo elemento es (f a b), donde a y b son los i-ésimos elementos de v1 y v2 respectivamente. Por ejemplo,
ghci> V.zipWith (+) (fromList [3,2,5]) (fromList [4,7])
fromList [7,9]
ghci> V.zipWith (+) (fromList [3,2,5]) (fromList [4,7,9,6])
fromList [7,9,14]
zipWith3
, zipWith4
, zipWith5
, zipWith6
son análogas a zipWith cambiando el número de listas que se emparejan.
(izipWith f v1 v2)
es el vector cuyo i-ésimo elemento es (f i a b), donde a y b son los i-ésimos elementos de v1 y v2 respectivamente. Por ejemplo,
ghci> let f x y z = Prelude.maximum [x,y,z]
ghci> izipWith f (fromList [3,0,2]) (fromList [4,0,1])
fromList [4,1,2]
izipWith3
, izipWith4
, izipWith5
, izipWith6
son análogas a izipWith.(unzip v)
es el par de vectores obtenido desemparejando los elemtos de v. Por ejemplo,ghci> V.unzip (fromList [(3,1),(2,0),(5,7)])
(fromList [3,2,5],fromList [1,0,7])
unzip3
, unzip4
, unzip5
, unzip6
son análogas a unzip.(filter p v)
es el vector de los elementos de que verifican el predicado p. Por ejemplo,ghci> V.filter (>3) (fromList [4,2,7,1,9,6])
fromList [4,7,9,6]
(ifilter f v)
es el vector de los elementos de v tales que se verifica (f i x), donde i es el índice de x. Por ejemplo,ghci> ifilter (\i x -> i+x < 9) (fromList [4,2,7,1,9,6])
fromList [4,2,1]
(takeWhile p v)
es el mayor prefijo de v cuyos elementos verifica p. Por ejemplo,ghci> V.takeWhile (<9) (fromList [4,2,7,1,9,6])
fromList [4,2,7,1]
(dropWhile p v)
es el vector obtenido borrando en v su mayor prefijo cuyos elementos verifica p. Por ejemplo,ghci> V.dropWhile (<9) (fromList [4,2,7,1,9,6])
fromList [9,6]
(particion p v)
es el par de vectores, el primero formado por los elementos de v que verifican p y el segundo por los restantes. Por ejemplo,ghci> partition (<5) (fromList [4,2,7,1,9,6])
(fromList [4,2,1],fromList [7,9,6])
(unstablePartition p v)
es equivalente a (partition v) pero más rápida, aunque no mantiene el orden de los elementos. Por ejemplo,ghci> unstablePartition (<5) (fromList [4,2,7,1,9,6])
(fromList [4,2,1],fromList [6,9,7])
(span p v)
es el par formado por el mayor prefijo de v que cumplen p y los restantes elementos. Por ejemplo,ghci> V.span (<9) (fromList [4,2,7,1,9,6])
(fromList [4,2,7,1],fromList [9,6])
(break p v)
es el par formado por el mayor prefijo de v que no cumplen p y los restantes elementos. Por ejemplo,ghci> V.break (<9) (fromList [4,2,7,1,9,6])
(fromList [],fromList [4,2,7,1,9,6])
(elem x v)
se verifica si x es un elemento de v. Por ejemplo,ghci> V.elem 7 (fromList [4,2,7,1,9,6])
True
ghci> V.elem 5 (fromList [4,2,7,1,9,6])
False
(notElem x v)
se verifica si x no es un elemento de v. Por ejemplo,ghci> V.notElem 7 (fromList [4,2,7,1,9,6])
False
ghci> V.notElem 5 (fromList [4,2,7,1,9,6])
True
(find p v)
es justo el primer elemento de v que verifica el predicado p, o Nothing si ninguno lo verifica. Por ejemplo,ghci> V.find (>5) (fromList [4,2,7,1,9,6])
Just 7
ghci> V.find (>9) (fromList [4,2,7,1,9,6])
Nothing
(findIndex p v)
es justo el índice del primer elemento de v que verifica el predicado p, o Nothing si ninguno lo verifica. Por ejemplo,ghci> V.findIndex (>5) (fromList [4,2,7,1,9,6])
Just 2
ghci> V.findIndex (>9) (fromList [4,2,7,1,9,6])
Nothing
(findIndices p v)
es la lista de los índices de los elementos de v que verifican el predicado p. Por ejemplo,ghci> V.findIndices (>5) (fromList [4,2,7,1,9,6])
fromList [2,4,5]
(elemIndex x v)
es justo el índice del primer elemento de v igual a x, o Nothing si todos son distintos de x. Por ejemplo,ghci> elemIndex 7 (fromList [4,2,7,1,9,6,7])
Just 2
ghci> elemIndex 5 (fromList [4,2,7,1,9,6,7])
Nothing
(elemIndices x v)
es la lista de los índices de los elementos de v iguales a x. Por ejemplo,ghci> elemIndices 7 (fromList [4,2,7,1,9,6,7])
fromList [2,6]
(foldl f x v)
es el plegado por la izquierda de v a partir de x; es decir, si los elementos de v son v1, v2, ..., vn entonces el plegado es (...((x f
v1) f
v2) ... f
vn). Por ejemplo,ghci> V.foldl (-) 9 (fromList [3,5])
1
ghci> (9-3)-5
1
(foldl1 f v)
es el plegado por la izquierda de v; es decir, si los elementos de v son v1, v2, ..., vn entonces el plegado es (...((v1 f
v2) f
v3) ... f
vn). Por ejemplo,ghci> V.foldl1 (-) (fromList [9,3,5])
1
ghci> (9-3)-5
1
foldl'
es equivalente a foldl, pero con evaluación estricta.
foldl1'
es equivalente a foldl, pero con evaluación estricta.
(foldr f x v)
es el plegado por la derecha de v a partir de x; es decir, si los elementos de v son v1, v2, ..., vn entonces el plegado es (v1 f
(v2 f
... (vn f
x)...)). Por ejemplo,
ghci> V.foldr (-) 9 (fromList [3,5])
7
ghci> 3-(5-9)
7
(foldr1 r v)
es el plegado por la derecha de v; es decir, si los elementos de v son v1, v2, ..., vn entonces el plegado es (v1 f
(v2 f
... (v(n-1) f
vn)...)). Por ejemplo,ghci> V.foldr1 (-) (fromList [3,5,9])
7
ghci> 3-(5-9)
7
foldr'
es equivalente a foldr, pero con evaluación estricta.
foldr1'
es equivalente a foldr, pero con evaluación estricta.
(ifoldl f x v)
es el plegado por la izquierda de v a partir de x, pero considerando también los índices. Por ejemplo,
ghci> let f a i b = i*(a+b)
ghci> V.ifoldl f 9 (fromList [3,5,4])
18
ghci> f (f (f 9 0 3) 1 5) 2 4
18
ifoldl'
es equivalente a ifoldl, pero con evaluación estricta.
(ifoldr f x v)
es el plegado por la derecha de v a partir de x, pero considerando también los índices. Por ejemplo,
ghci> let f a i b = i*(a+b)
ghci> V.ifoldr f 9 (fromList [3,5,4])
675
ghci> f 0 3 (f 1 5 (f 2 4 9))
675
ifoldr'
es equivalente a ifoldr, pero con evaluación estricta.(all p v)
se verifica si todos los elementos de v cumplen la propiedad p. Por ejemplo,ghci> V.all (<7) (fromList [3,5,2])
True
ghci> V.all (<7) (fromList [3,9,2])
False
(any p v)
se verifica si algún elemento de v cumple la propiedad p. Por ejemplo,ghci> V.any (<7) (fromList [3,9,2])
True
ghci> V.any (<1) (fromList [3,9,2])
False
(and v)
se verifica si todos los elementos de v son verdaderos. Por ejemplo,ghci> V.and (fromList [True,2+3==5])
True
ghci> V.and (fromList [True,2+3/=5])
False
(or v)
se verifica si algún elemento de v es verdadero. Por ejemplo,ghci> V.or (fromList [True,2+3/=5])
True
ghci> V.or (fromList [2==3,2+3/=5])
False
(sum v)
es la suma de los elementos de v. Por ejemplo,ghci> V.sum (fromList [3,5,2])
10
(product v)
es el producto de los elementos de v. Por ejemplo,ghci> V.product (fromList [3,5,2])
30
(maximum v)
es el máximo de los elementos de v. Por ejemplo,ghci> V.maximum (fromList [3,5,2])
5
(maximumBy f v)
es el máximo elemento de v respecto de la función de comparación f. Por ejemplo,ghci> import Data.Ord
ghci> maximumBy (comparing abs) (fromList [3,-5,2])
-5
(minimum v)
es el mínimo de los elementos de v. Por ejemplo,ghci> V.minimum (fromList [3,5,2])
2
(minimumBy f v)
es el mínimo elemento de v respecto de la función de comparación f. Por ejemplo,ghci> import Data.Ord
ghci> minimumBy (comparing abs) (fromList [3,-5,2])
2
(maxIndex v)
es el índice del elemento máximo de v. Por ejemplo,ghci> maxIndex (fromList [3,5,2])
1
(maxIndexBy f v)
es el índice del máximo elemento de v respecto de la función de comparación f. Por ejemplo,ghci> import Data.Ord
ghci> maxIndexBy (comparing abs) (fromList [3,-5,2])
1
(minIndex v)
es el índice del mínimo elemento de v. Por ejemplo,ghci> import Data.Ord
ghci> minIndex (fromList [3,-5,1])
1
(minIndexBy f v)
es el índice del mínimo elemento de v respecto de la función de comparación f. Por ejemplo,ghci> import Data.Ord
ghci> minIndexBy (comparing abs) (fromList [3,-5,1])
2
(prescanl f x v)
es el vector de los acumulados de las operaciones f por la izquierda de v a partir de x. Por ejemplo,ghci> prescanl (-) 9 (fromList [5,2,3,1])
fromList [9,4,2,-1]
ghci> [9,9-5,(9-5)-2,((9-5)-2)-3]
[9,4,2,-1]
prescanl'
es equivalente a prescanl, pero con evaluación estricta.
(postscanl f x v)
es el vector de los acumulados de las operaciones f por la izquierda de v a partir de x. Por ejemplo,
ghci> postscanl (-) 9 (fromList [5,2,3,1])
fromList [4,2,-1,-2]
ghci> [9-5,(9-5)-2,((9-5)-2)-3,(((9-5)-2)-3)-1]
[4,2,-1,-2]
postscanl'
es equivalente a postscanl, pero con evaluación estricta.
(scanl f x v)
es el vector de los acumulados de las operaciones f por la izquierda de v a partir de x. Por ejemplo,
ghci> V.scanl (-) 9 (fromList [5,2,3,1])
fromList [9,4,2,-1,-2]
ghci> [9,9-5,(9-5)-2,((9-5)-2)-3,(((9-5)-2)-3)-1]
[9,4,2,-1,-2]
scanl'
es equivalente a scanl, pero con evaluación estricta.
(scanl1 f v)
es el vector de los acumulados de las operaciones f por la izquierda. Por ejemplo,
ghci> V.scanl1 (-) (fromList [9,5,2,3,1])
fromList [9,4,2,-1,-2]
ghci> [9,9-5,(9-5)-2,((9-5)-2)-3,(((9-5)-2)-3)-1]
[9,4,2,-1,-2]
scanl1'
es equivalente a scanl1, pero con evaluación estricta.
(prescanr f x v)
es el vector de los acumulados de las operaciones f por la derecha de v a partir de x. Por ejemplo,
ghci> V.prescanr (-) 9 (fromList [5,2,3,1])
fromList [-9,11,-8,9]
ghci> [2-(3-(1-9)),3-(1-9),1-9,9]
[-9,11,-8,9]
prescanr'
es equivalente a prescanr, pero con evaluación estricta.
(postscanr f x v)
es el vector de los acumulados de las operaciones f por la derecha de v a partir de x. Por ejemplo,
ghci> V.postscanr (-) 9 (fromList [5,2,3,1])
fromList [14,-9,11,-8]
ghci> [5-(2-(3-(1-9))),2-(3-(1-9)),3-(1-9),1-9]
[14,-9,11,-8]
postscanr'
es equivalente a postscanr, pero con evaluación estricta.
(scanr f x v)
es el vector de los acumulados de las operaciones f por la derecha de v a partir de x. Por ejemplo,
ghci> V.scanr (-) 9 (fromList [5,2,3,1])
fromList [14,-9,11,-8,9]
ghci> [5-(2-(3-(1-9))),2-(3-(1-9)),3-(1-9),1-9,9]
[14,-9,11,-8,9]
scanr'
es equivalente a scanr, pero con evaluación estricta.
(scanr1 f v)
es el vector de los acumulados de las operaciones f por la derecha de v. Por ejemplo,
ghci> V.scanr1 (-) (fromList [5,2,3,1,9])
fromList [14,-9,11,-8,9]
ghci> [5-(2-(3-(1-9))),2-(3-(1-9)),3-(1-9),1-9,9]
[14,-9,11,-8,9]
scanr1'
es equivalente a scanr1, pero con evaluación estricta.(toList v)
es la lista formada por los elementos del vector v. Por ejemplo,ghci> toList (fromList [3,2,5])
[3,2,5]
(fromList xs)
es el vector correspondiente a la lista xs. Por ejemplo,ghci> let v = fromList [3,2,5]
ghci> :t v
v :: Vector Integer
(fromListN n xs)
es el vector formado por los n primeros elementos de xs. Por ejemplo,ghci> fromListN 5 [3..20]
fromList [3,4,5,6,7]