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) |
Haskell
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) |