TAD de los polinomios: Término líder de un polinomio
Usando el tipo abstracto de los polinomios, definir la función
1 |
termLider :: (Num a, Eq a) => Polinomio a -> Polinomio a |
tal que termLider p
es el término líder del polinomio p
. Por ejemplo,
1 2 3 4 5 |
λ> ejPol = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero)) λ> ejPol x^5 + 5*x^2 + 4*x λ> termLider ejPol x^5 |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 5 6 7 8 9 |
import TAD.Polinomio (Polinomio, coefLider, grado, polCero, consPol) import Pol_Crea_termino (creaTermino) termLider :: (Num a, Eq a) => Polinomio a -> Polinomio a termLider p = creaTermino (grado p) (coefLider p) -- La función creaTermino está definida en el ejercicio -- "Construcción de términos" que se encuentra en -- https://bit.ly/3GXteuH |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
from typing import TypeVar from hypothesis import given from src.Pol_Crea_termino import creaTermino from src.TAD.Polinomio import (Polinomio, coefLider, consPol, grado, polCero, polinomioAleatorio) A = TypeVar('A', int, float, complex) # 1ª solución # =========== def termLider(p: Polinomio[A]) -> Polinomio[A]: return creaTermino(grado(p), coefLider(p)) # 2ª solución # =========== def termLider2(p: Polinomio[A]) -> Polinomio[A]: return creaTermino(p.grado(), p.coefLider()) # La función creaTermino está definida en el ejercicio # "Construcción de términos" que se encuentra en # https://bit.ly/3GXteuH # Equivalencia de las definiciones # ================================ # La propiedad es @given(p=polinomioAleatorio()) def test_termLider(p: Polinomio[int]) -> None: assert termLider(p) == termLider2(p) # La comprobación es # > poetry run pytest -q Pol_Termino_lider.py # 1 passed in 0.21s |