Ir al contenido principal

Polinomios pares

Un polinomio de coeficientes enteros se dirá par si todos sus coeficientes son números pares. Por ejemplo, el polinomio 2x³ - 4x² + 8 es par y el x² + 2x + 10 no lo es.

Definir el predicado

parPol :: Integral a => Polinomio a -> Bool

tal que (parPol p) se verifica si p es un polinomio par. Por ejemplo,

λ> parPol (consPol 3 2 (consPol 2 (-4) (consPol 0 8 polCero)))
True
λ> parPol (consPol 2 1 (consPol 1 2 (consPol 0 10 polCero)))
False

Comprobar con QuickCheck que la suma de un polinomio con él mismo es un polinomio par.

Nota: Este ejercicio debe realizarse usando la librería I1M.Pol que se encuentra aquí y se describe aquí.


Soluciones

import I1M.PolOperaciones
import Test.QuickCheck

parPol :: Integral a => Polinomio a -> Bool
parPol p = esPolCero p || (even (coefLider p) && parPol (restoPol p))

-- La propiedad es
prop_parPol :: Integral a => Polinomio a -> Bool
prop_parPol p =
    parPol (sumaPol p p)

-- La comprobación es
--    λ> quickCheck prop_parPol
--    +++ OK, passed 100 tests.