Número de variables de una expresión aritmética
Las expresiones aritméticas construidas con una variable (denotada por X
), los números enteros y las operaciones de sumar y multiplicar se pueden representar mediante el tipo de datos Expr definido por
data Expr = X | C Int | S Expr Expr | P Expr Expr
Por ejemplo, la expresión X·(13+X)
se representa por
P X (S (C 13) X)
Definir la función
numVars :: Expr -> Int
tal que numVars e
es el número de variables en la expresión e
. Por ejemplo,
numVars (C 3) == 0 numVars X == 1 numVars (P X (S (C 13) X)) == 2
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
data Expr = X | C Int | S Expr Expr | P Expr Expr numVars :: Expr -> Int numVars X = 1 numVars (C _) = 0 numVars (S a b) = numVars a + numVars b numVars (P a b) = numVars a + numVars b
Soluciones en Python
from dataclasses import dataclass @dataclass class Expr: pass @dataclass class X(Expr): pass @dataclass class C(Expr): x: int @dataclass class S(Expr): x: Expr y: Expr @dataclass class P(Expr): x: Expr y: Expr def numVars(e: Expr) -> int: match e: case X(): return 1 case C(_): return 0 case S(e1, e2): return numVars(e1) + numVars(e2) case P(e1, e2): return numVars(e1) + numVars(e2) assert False