Números naturales separados por ceros
Definir la sucesión
naturales0 :: [Int]
cuyos elementos son los números naturales separados por 0. Por ejemplo,
λ> take 25 naturales0 [0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12]
Comprobar con QuickCheck que el n-ésimo término de la sucesión es n*(1+(-1)^n)/4.
Nota. En la comprobación usar
quickCheckWith (stdArgs {maxSize=7}) prop_naturales0
Soluciones
import Test.QuickCheck naturales0 :: [Int] naturales0 = concat [[n,0] | n <- [0..]] -- La propiedad es prop_naturales0 :: Int -> Property prop_naturales0 n = n >= 0 ==> naturales0 !! n == n*(1+(-1)^n) `div` 4 -- La comprobación es -- λ> quickCheckWith (stdArgs {maxSize=7}) prop_naturales0 -- +++ OK, passed 100 tests.