TAD de los polinomios: Construcción de términos
Usando el tipo abstracto de los polinomios, definir la función
1 |
creaTermino :: (Num a, Eq a) => Int -> a -> Polinomio a |
tal que (creaTermino n a) es el término a*x^n. Por ejemplo,
1 |
creaTermino 2 5 == 5*x^2 |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 |
import TAD.Polinomio (Polinomio, polCero, consPol) creaTermino :: (Num a, Eq a) => Int -> a -> Polinomio a creaTermino n a = consPol n a polCero |
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 |
from typing import TypeVar from hypothesis import given from hypothesis import strategies as st from src.TAD.Polinomio import (Polinomio, consPol, polCero) A = TypeVar('A', int, float, complex) # 1ª solución # =========== def creaTermino(n: int, a: A) -> Polinomio[A]: return consPol(n, a, polCero()) # 2ª solución # =========== def creaTermino2(n: int, a: A) -> Polinomio[A]: r: Polinomio[A] = polCero() return r.consPol(n, a) # Equivalencia de las definiciones # ================================ # La propiedad es @given(st.integers(min_value=0, max_value=9), st.integers(min_value=-9, max_value=9)) def test_creaTermino(n: int, a: int) -> None: assert creaTermino(n, a) == creaTermino2(n, a) # La comprobación es # > poetry run pytest -q Pol_Crea_termino.py # 1 passed in 0.21s |