Número de sumas en una expresión aritmética
Las expresiones aritméticas con variables pueden representarse usando el siguiente tipo de datos
data Expr = C Int | V Char | S Expr Expr | P Expr Expr
Por ejemplo, la expresión 2·(a+5)
se representa por
P (C 2) (S (V 'a') (C 5))
Definir la función
sumas :: Expr -> Int
tal que sumas e
es el número de sumas en la expresión e
. Por ejemplo,
sumas (P (V 'z') (S (C 3) (V 'x'))) == 1 sumas (S (V 'z') (S (C 3) (V 'x'))) == 2 sumas (P (V 'z') (P (C 3) (V 'x'))) == 0
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
data Expr = C Int | V Char | S Expr Expr | P Expr Expr sumas :: Expr -> Int sumas (V _) = 0 sumas (C _) = 0 sumas (S x y) = 1 + sumas x + sumas y sumas (P x y) = sumas x + sumas y
Soluciones en Python
from dataclasses import dataclass @dataclass class Expr: pass @dataclass class C(Expr): x: int @dataclass class V(Expr): x: str @dataclass class S(Expr): x: Expr y: Expr @dataclass class P(Expr): x: Expr y: Expr def sumas(e: Expr) -> int: match e: case C(a): return 0 case V(x): return 0 case S(e1, e2): return 1 + sumas(e1) + sumas(e2) case P(e1, e2): return sumas(e1) + sumas(e2) assert False