Primer Parcial 1er Cuat 2016 (Paradigmas)

De Cuba-Wiki

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)