Suma de posteriores
Definir la función
1 |
sumaPosteriores :: [Int] -> [Int] |
tal que (sumaPosteriores xs) es la lista obtenida sustituyendo cada elemento de xs por la suma de los elementos posteriores. Por ejemplo,
1 2 |
sumaPosteriores [1..8] == [35,33,30,26,21,15,8,0] sumaPosteriores [1,-3,2,5,-8] == [-4,-1,-3,-8,0] |
Comprobar con QuickCheck que el último elemento de la lista (sumaPosteriores xs) siempre es 0.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import Data.List (tails) import Test.QuickCheck -- 1ª definición (por recursión): sumaPosteriores1 :: [Int] -> [Int] sumaPosteriores1 [] = [] sumaPosteriores1 (x:xs) = sum xs : sumaPosteriores1 xs -- 2ª definición (sin argumentos) sumaPosteriores2 :: [Int] -> [Int] sumaPosteriores2 = map (sum . tail) . init . tails -- La propiedad es propSumaP:: [Int] -> Property propSumaP xs = not (null xs) ==> last (sumaPosteriores1 xs) == 0 -- La comprobación es -- ghci> quickCheck propSumaP -- +++ OK, passed 100 tests. |