Exercitium1-0.1.0.0: Problemas de Exercitium (Volumen 1)

CopyrightExercitium (09-05-14)
LicenseGPL-3
MaintainerJoseA.Alonso@gmail.com
Safe HaskellSafe
LanguageHaskell2010

Separacion_por_posicion

Description

Separación por posición

Definir la función

particion :: [a] -> ([a],[a])

tal que (particion xs) es el par cuya primera componente son los elementos de xs en posiciones pares y su segunda componente son los restantes elementos. Por ejemplo,

>>> particion [3,5,6,2]
([3,6],[5,2])
>>> particion [3,5,6,2,7]
([3,6,7],[5,2])
>>> particion "particion"
("priin","atco")

Synopsis

Documentation

particion :: [a] -> ([a], [a]) Source #

1ª definición (por recursión y auxiliares con recursión cruzada).

pares :: [a] -> [a] Source #

(pares xs) es la lista de los elementos de xs en posiciones pares. Por ejemplo,

>>> pares [3,5,6,2]
[3,6]

impares :: [a] -> [a] Source #

(impares xs) es la lista de los elementos de xs en posiciones impares. Por ejemplo,

>>> impares [3,5,6,2]
[5,2]

particion2 :: [a] -> ([a], [a]) Source #

2ª definición (por comprensión).

particion3 :: [a] -> ([a], [a]) Source #

3ª definición (por comprensión e índices)

particion4 :: [a] -> ([a], [a]) Source #

4ª definición (por recursión).

particion5 :: [a] -> ([a], [a]) Source #

5ª definición (por plegado).

prop_equiv_particion :: [Int] -> Bool Source #

(prop_equiv_particion xs) se verifica si las definiciones de particion son equivalentes sobre xs. Por ejemplo,

>>> all prop_equiv_particion [[3,5,6,2], [3,5,6,2,7]]
True

verifica_equiv_particion :: IO () Source #

Comprueba la equivalencia de las definiciones de particion.

>>> verifica_equiv_particion
+++ OK, passed 100 tests.

Comparación de eficiencia

> sum (snd (particion [1..20000]))
100010000
(0.03 secs, 4,220,080 bytes)
> sum (snd (particion2 [1..20000]))
100010000
(0.05 secs, 9,817,496 bytes)
> sum (snd (particion3 [1..20000]))
100010000
(1.26 secs, 4,701,208 bytes)
> sum (snd (particion4 [1..20000]))
100010000
(0.06 secs, 9,979,608 bytes)
> sum (snd (particion5 [1..20000]))
100010000
(0.04 secs, 7,124,400 bytes)

> sum (snd (particion [1..10^6]))
250000500000
(0.92 secs, 192,989,200 bytes)
> sum (snd (particion2 [1..10^6]))
250000500000
(2.24 secs, 472,989,112 bytes)
> sum (snd (particion4 [1..10^6]))
250000500000
(1.88 secs, 480,988,912 bytes)
> sum (snd (particion5 [1..10^6]))
250000500000
(2.12 secs, 339,451,600 bytes)