El tipo de las expresiones aritméticas - Número de operaciones en una expresión
Usando el tipo de las expresiones aritméticas, definir la función
numeroOps :: Expr -> Int
tal que numeroOps e
es el número de operaciones de e
. Por ejemplo,
numeroOps (Lit 3) == 0 numeroOps (Suma (Lit 7) (Op (Lit 5))) == 2
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
import Tipo_expresion_aritmetica (Expr (..)) numeroOps :: Expr -> Int numeroOps (Lit _) = 0 numeroOps (Suma x y) = 1 + numeroOps x + numeroOps y numeroOps (Op x) = 1 + numeroOps x numeroOps (SiCero x y z) = 1 + numeroOps x + numeroOps y + numeroOps z
Soluciones en Python
from src.tipo_expresion_aritmetica import Expr, Lit, Op, SiCero, Suma def numeroOps(e: Expr) -> int: match e: case Lit(_): return 0 case Suma(x, y): return 1 + numeroOps(x) + numeroOps(y) case Op(x): return 1 + numeroOps(x) case SiCero(x, y, z): return 1 + numeroOps(x) + numeroOps(y) + numeroOps(z) assert False