-- PROGRAMACION DECLARATIVA -- SOLUCIONES CONTROL 1 (P.FUNCIONAL) (13.4.2000) -- 1. Dado el programa Haskell: fact :: Integer -> Integer fact n = if n == 0 then 1 else n * fact (n-1) lf :: Integer -> [Integer] lf 0 = [1] lf n = (fact n) : lf (n-1) -- (a) Indicar el tipo de f en la siguiente expresión. -- Justificar brevemente la respuesta. -- -- f (lf 5) (f (lf 3) 1) -- -- (b) Indicar a qué se reduce la siguiente expresión. -- Justificar brevemente la respuesta. -- -- let a:b:c = lf 3 in 0 : if b*b < a then c else [] -- --(c) Implementar una función que mejore la eficiciencia de lf -- (obsérvese que calcula todos los factoriales sin tener en -- cuenta los ya calculados). -- 2 Implementar una función Haskell que trenza las listas dadas en -- una lista de listas. Por ejemplo, con [[1,2,3],[10,20], -- [100,2000,3000]] obtiene [1,10,100,2,20,2000,3,3000], con -- ["la","lista"] obtiene "llaista", etc. -- 4. Dado el tipo data Vehiculo a = Coche a | Moto a -- implementar una función que distribuye una lista de vehículos -- en dos grupos: uno con los coches y otro con las motos.