module Ctrol2 where ---------------------------------------------------------------- -- PROGRAMACIÓN DECLARATIVA P. Funcional - Control2 29 . 5 . 2k ---------------------------------------------------------------- -- 1. Dado el programa Haskell: data MArbol a = Vacio | Nodo a [MArbol a] k :: Int -> Int -> Int k n m = if n b)] -> [a] -> [[b]] mapmap [] _ = [] mapmap (f:lf) l = (map f l) : mapmap lf l -- (a) Indicar el tipo de f en la siguiente expresión. Justificar -- brevemente la respuesta. -- -- f ( Nodo 5 (f Vacio (\n -> n) ) ) (+2) -- -- -- (b) Indicar a qué se reduce la siguiente expresión. Justificar -- brevemente la respuesta. -- -- (c) Implementar la función mapMA que funiona como map, pero sobre -- datos de tipo MArbol. Es decir, debe aplicar una función a -- cada uno de los elementos de un dato Marbol. -- 2. Implementar en Haskell la función menorStr para comparar dos -- strings según un carácter dado como argumento, de forma que -- un string es menor que otro si contiene menos veces al carácter. -- Por ejemplo, "casa" es menor que "casos" con respecto al -- carácter 's', y mayor con respecto al carácter 'a'. Poner un -- ejemplo de llamada a una función de ordenación de orden -- superior, en la que se use menorStr para ordenar una lista de -- strings. -- 3. Representamos como Cm,n el número combinatorio "m sobre n", -- con 0 <= m <= n. Se llama fila m-ésima, o m-fila, a la lista -- formada por los valores Cm,0 , Cm,1 , ..., Cm,m , y se llama -- triángulo de Pascal al conjunto de todas las filas, ordenadas -- según m. En las filas se cumple que Cm,0 = 1, Cm,n = 1 si -- m = n, y Cm,n = Cm-1,n + Cm-1,n-1 en otros casos. -- -- (a) Implementar una función Haskell que obtiene el triángulo de -- Pascal. -- (b) Usando el triángulo de Pascal, implementar una función Haskell -- que obtiene la fila no trivial en la que se encuentra un valor -- dado c > 1 (la fila trivial es la fila c-ésima, cuyo segundo -- elemento es c). Se supone que tal fila existe. -- filaDe :: Integer -> [Integer] filaDe c = busca c colaPas where _ : colaPas = triPas2 busca c ((1:m:f):t) = if (c /= m) && (elem c f) then (1:m:f) else busca c t -- -- Opcional (solo cuenta si se aprueba) -- -- Implementar en Lisp (Common Lisp) la función filter. --