Plantilla:Back
Ejercicio 1
a)
foldfs :: b -> (Nombre -> b -> b) -> (Nombre -> b -> b -> b) -> Filesystem -> b
foldfs fvacio farchivo fcarpeta fs =
case fs of vacio -> fvacio
archivo n fs -> farchivo n (rec fs)
carpeta n fsc fss -> fcarpeta n (rec fsc) (rec fss)
where rec = foldfs fvacio farchivo fcarpeta
b)
listado :: [Nombre]
listado = foldfs [] (:) (\s l1 l2 -> s:l2)
c)
rutasdearchivo :: Nombre -> Filesystem -> [Nombre]
rutasdearchivo n = foldfs [] (\s p -> if s==n then '/':n++p else p) (\c p1 p2 -> (map (\s -> '/':c++s) p1) ++ p2)
d)
arosetrees :: Filesystem -> [Rosetree Nombre]
arosetrees = foldfs [] (\s b -> (Rose s []) : b) (\s b1 b2 -> (Rose s b1):b2)
arosetree :: Filesystem -> Rosetree Nombre
arosetree = Rose '/' arosetrees
Ejercicio 2
a)
b)