Enumeración de los números enteros
Exercitium
Definir la sucesión
1 |
enteros :: [Int] |
tal que sus elementos son los números enteros comenzando en el 0 e intercalando los positivos y los negativos. Por ejemplo,
1 2 |
ghci> take 23 enteros [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7,8,-8,9,-9,10,-10,11,-11] |
Comprobar con QuickCheck que el n-ésimo término de la sucesión es (1-(2n+1)(-1)^n)/4.
Nota. En la comprobación usar
1 |
quickCheckWith (stdArgs {maxSize=7}) prop_enteros |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import Test.QuickCheck enteros :: [Int] enteros = 0 : concat [[n,-n] | n <- [1..]] -- La propiedad es prop_enteros :: Int -> Property prop_enteros n = n >= 0 ==> enteros !! n == (1-(2*n+1)*(-1)^n) `div` 4 -- La comprobación es -- ghci> quickCheckWith (stdArgs {maxSize=7}) prop_enteros -- +++ OK, passed 100 tests. |