Data expresion = Valex Integer | Sum Espresion Expresion | mult Expresion Expresion evaluar :: Expresion -> Integer evaluar Valex n = n evaluar Mult x y = evaluar x * evaluar y evaluar Sum x y = evaluar x + evaluar y iguales :: Expresion -> Expresion -> Bool iguales (Valex n) (Valex m) = n == m iguales (Sum x y) (Sum a b) = iguales x a && iguales y b iguales (Mult x y) Mult (a b) = iguales x a && iguales y b iguales | otherwise = false subexpresion :: Expresion -> exppresion -> Bool subexpresion x Valex a = iguales x Valex a subexpresion (Sum a b) (Sum x y) = iguales a x && iguales b y || subexpresion (Sum a b) x || subexpresion (Sum a b) y subexpresion (Mult a b) (Mult x y) = iguales x a && iguales b y || subexpresion (Mult a b) x || subexpresion (Mult a b) y subexpresion (Sum a b) (Mult x y) = subexpresion (Sum a b) x || subexpresion (Sum a b) x subexpresion (Mult a b) (Sum x y ) = subexpresion (Mult a b) x || subexpresion (Sum a b) y