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
1 |
numeroOps :: Expr -> Int |
tal que numeroOps e
es el número de operaciones de e
. Por ejemplo,
1 2 |
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.
1 2 3 4 5 6 7 |
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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |