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 |