Menu Close

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)

Pensamiento

Vivir es devorar tiempo, esperar; y por muy trascendente que quiera ser nuestra espera, siempre será espera de seguir esperando.

Antonio Machado

5 soluciones de “Expresiones aritméticas generales

  1. frahidzam
    valor :: Expresion -> Int
    valor (N n) = n
    valor (S s) = sum [valor x | x <- s]
    valor (P p) = product [valor x | x <- p]
  2. adogargon
    valor :: Expresion -> Int
    valor (N a)  = a
    valor (S xs) = sum (map valor xs)
    valor (P xs) = product (map valor xs)
  3. luipromor
    valor :: Expresion -> Int
    valor (N x )     = x
    valor (S [])     = 0
    valor (S (x:xs)) = valor x + valor (S xs)
    valor (P [])     = 1
    valor (P (x:xs)) = valor x * valor (P xs)
  4. Raúl Sánchez Moreno (rausanmor1)
    valor :: Expresion -> Int
    valor (N x)  = x
    valor (S es) = foldr (x y->valor x+y) 0 es
    valor (P es) = foldl (x y->valor y*x) 1 es
  5. javmarcha1
     
    data Expresion = N Int
                   | S [Expresion]
                   | P [Expresion]
     deriving Show
     
    valor :: Expresion -> Int
    valor (N n)  = n
    valor (S []) = 0
    valor (S n)  = sum [valor x | x <- n]
    valor (P []) = 1
    valor (P n)  = product [valor x | x <- n]

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.