Expresiones vectoriales
Enunciado
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | -- El siguiente tipo de dato define representa las expresiones -- vectoriales formadas por un vector, la suma de dos expresiones -- vectoriales o el producto de un entero por una expresión vectorial.  --    data ExpV = Vec Int Int --              | Sum ExpV ExpV --              | Mul Int ExpV --              deriving Show --  -- Definir la función  --    valor :: ExpV -> (Int,Int) -- tal que (valor e) es el valor de la expresión vectorial c. Por -- ejemplo,  --    valor (Vec 1 2)                                  ==  (1,2) --    valor (Sum (Vec 1 2 ) (Vec 3 4))                 ==  (4,6) --    valor (Mul 2 (Vec 3 4))                          ==  (6,8) --    valor (Mul 2 (Sum (Vec 1 2 ) (Vec 3 4)))         ==  (8,12) --    valor (Sum (Mul 2 (Vec 1 2)) (Mul 2 (Vec 3 4)))  ==  (8,12) | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | data ExpV = Vec Int Int           | Sum ExpV ExpV           | Mul Int ExpV           deriving Show -- 1ª solución -- =========== valor :: ExpV -> (Int,Int) valor (Vec x y)   = (x,y) valor (Sum e1 e2) = (x1+x2,y1+y2) where (x1,y1) = valor e1                                           (x2,y2) = valor e2   valor (Mul n e)   = (n*x,n*y) where (x,y) = valor e   -- 2ª solución -- =========== valor2 :: ExpV -> (Int,Int) valor2 (Vec a b)   = (a, b) valor2 (Sum e1 e2) = suma (valor2 e1) (valor2 e2) valor2 (Mul n e1)  = multiplica n (valor2 e1) suma :: (Int,Int) -> (Int,Int) -> (Int,Int) suma (a,b) (c,d) = (a+c,b+d) multiplica :: Int -> (Int, Int) -> (Int, Int) multiplica n (a,b) = (n*a,n*b) |