funcion fold para tipos que no son listas
Publicado por duran (1 intervención) el 28/11/2007 19:10:24
Hola, tengo el siguiente problema sobre la funcion FOLD de orden superior.
Se me presenta una definicion de tipo de datos como sigue:
data AlgExp a = AlgExp
{litI :: Int -> a
,litB :: Bool -> a
,add :: a -> a -> a
,and :: a -> a -> a
,ifte : : a -> a -> a -> a
}
osea, literales enteros, booleanos, expresion add, expresion and y expresion IfThenElse.
Pues bien, mi labor consiste en completar una funcion fold para el tipo de las expresiones.
Es decir
foldExp :: AlgExp a -> Exp -> a
foldExp alg (LitI i) = litI alg i
foldExp alg (LitB b) = litB alg b
foldExp alg (add exp1 exp2)= ???
foldExp alg (and exp1 exp2)= ???
foldExp alg (ifte exp1 exp2 exp3)= ???
..mi pregunta es, como podria hacer el fold para las expresiones de tipo and exp1 exp2 ,add exp1 exp2, y ifte exp1 exp2 exp3? Supongo que debe ser algo bastante obvio, pero por mucho que doy vueltas no caigo en que deberia hacer.
Muchisimas gracias!!!
Se me presenta una definicion de tipo de datos como sigue:
data AlgExp a = AlgExp
{litI :: Int -> a
,litB :: Bool -> a
,add :: a -> a -> a
,and :: a -> a -> a
,ifte : : a -> a -> a -> a
}
osea, literales enteros, booleanos, expresion add, expresion and y expresion IfThenElse.
Pues bien, mi labor consiste en completar una funcion fold para el tipo de las expresiones.
Es decir
foldExp :: AlgExp a -> Exp -> a
foldExp alg (LitI i) = litI alg i
foldExp alg (LitB b) = litB alg b
foldExp alg (add exp1 exp2)= ???
foldExp alg (and exp1 exp2)= ???
foldExp alg (ifte exp1 exp2 exp3)= ???
..mi pregunta es, como podria hacer el fold para las expresiones de tipo and exp1 exp2 ,add exp1 exp2, y ifte exp1 exp2 exp3? Supongo que debe ser algo bastante obvio, pero por mucho que doy vueltas no caigo en que deberia hacer.
Muchisimas gracias!!!
Valora esta pregunta


0