Stack Overflow en español Asked on February 20, 2021
Hace unos cuentos días que estoy trabado con este ejercicio:
Dado el siguiente tipo de datos algebraico que representa las expresiones aritméticas entre números enteros que involucran sumas y productos:
data ExpA = Cte Int | Suma ExpA ExpA | Producto ExpA ExpA
Por ejemplo, la expresión exp = (3 + (1 + 1) ∗ 5)
se representa de la siguiente forma:
exp = Suma (Cte 3) (Producto (Suma (Cte 1) (Cte 1)) (Cte 5))
i) Escribir el esquema de fold
de ExpA
. En este ejercicio se debe utilizar recursión explícita.
ii) Escribir la función cantidadSumas :: ExpA −> Int
, que devuelve la cantidad de
sumas que aparecen en la expresión aritmética dada.
iii) Escribir la función simplificarEA :: ExpA −> ExpA
, que dada una expresión aritmética, devuelve una expresión equivalente pero que no tiene sumas del número 0, ni multiplicaciones por 1 o por 0.
¿Alguien me podrá ayudar?
La verdad me pasa lo mismo. Creo que es algo así:
--Patter Matching
foldE f _ _ (Cte c) = f c
foldE f g h (Suma p1 p2) = g (foldE f g h p1) (foldE f g h p2)
foldE f g h (Producto p1 p2) = h (foldE f g h p1) (foldE f g h p2)
Siento que me quede atascado.
Answered by chano on February 20, 2021
data ExpA = Cte Int | Suma ExpA ExpA | Producto ExpA ExpA
i) Escribir el esquema de fold de ExpA. En este ejercicio se debe utilizar recursión explícita.
foldlExpA :: (int->a)->(a->a->a)->(a->a->a)Exp->a
foldlExpA f _ _ (Cte i) = fi
...
Answered by user199805 on February 20, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP