Ir al contenido principal

Expresiones aritméticas generales

Las expresiones aritméticas. generales se contruyen con las sumas generales (sumatorios) y productos generales (productorios). Su tipo es

data Expresion = N Int
               | S [Expresion]
               | P [Expresion]
  deriving Show

Por ejemplo, la expresión

(2·(1 + 2 + 1)·(2 + 3)) + 1

se representa por

S [P [N 2,
      S [N 1, N 2, N 1],
      S [N 2, N 3]],
   N 1]

Definir la función

valor :: Expresion -> Int

tal que (valor e) es el valor de la expresión e. Por ejemplo,

λ> valor (S [P [N 2, S [N 1, N 2, N 1], S [N 2, N 3]], N 1])
41

Soluciones

data Expresion = N Int
               | S [Expresion]
               | P [Expresion]
  deriving Show

valor :: Expresion -> Int
valor (N x)  = x
valor (S es) = sum (map valor es)
valor (P es) = product (map valor es)