TransWikia.com

Esquemas de recursión en otras estructuras Haskell

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?

2 Answers

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP