Copyright | Exercitium (09-05-14) |
---|---|
License | GPL-3 |
Maintainer | JoseA.Alonso@gmail.com |
Safe Haskell | Safe |
Language | Haskell2010 |
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")
- particion :: [a] -> ([a], [a])
- pares :: [a] -> [a]
- impares :: [a] -> [a]
- particion2 :: [a] -> ([a], [a])
- particion3 :: [a] -> ([a], [a])
- particion4 :: [a] -> ([a], [a])
- particion5 :: [a] -> ([a], [a])
- prop_equiv_particion :: [Int] -> Bool
- verifica_equiv_particion :: IO ()
Documentation
particion :: [a] -> ([a], [a]) Source #
1ª definición (por recursión y auxiliares con recursión cruzada).
(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)