Repeticiones según la posición
Definir la función
transformada :: [a] -> [a]
tal que (transformada xs) es la lista obtenida repitiendo cada elemento tantas veces como indica su posición en la lista. Por ejemplo,
transformada [7,2,5] == [7,2,2,5,5,5] transformada "eco" == "eccooo"
Comprobar con QuickCheck si la transformada de una lista de n números enteros, con n >= 2, tiene menos de n^3 elementos.
Soluciones
import Test.QuickCheck transformada :: [a] -> [a] transformada xs = concat [replicate n x | (n,x) <- zip [1..] xs] -- La propiedad es prop_transformada :: [Int] -> Property prop_transformada xs = n >= 2 ==> length (transformada xs) < n^3 where n = length xs -- La comprobación es -- λ> quickCheck prop_transformada -- +++ OK, passed 100 tests.