Prueba Funcional 2013

Anuncio
Prueba Funcional
Curso 2015
Ejercicio 1
Sean las siguientes definiciones:
data Tree a = Nil | Node a (Tree a) (Tree a)
deriving (Eq,Show,Read)
subTree
subTree
subTree
subTree
subTree
:: (Eq a) => Tree a -> Tree a -> Bool
Nil Nil = True
Nil (Node a t1 t2) = False
_ Nil = False
(Node a t1 t2) (Node b g1 g2)
| a == b = (subTree t1 g1) && (subTree t2 g2)
| otherwise = (subTree t1 (Node b g1 g2)) || (subTree t2 (Node b g1 g2))
¿Cuál de las siguientes expresiones devuelve True al ser evaluada?
a) subTree (Node 5 (Node 1 (Node 4 Nil Nil) Nil) (Node 2 (Node 3 Nil Nil) Nil)) (Node 1 (Node 4
Nil Nil) Nil)
b) subTree (Node 1 (Node 4 Nil Nil) Nil) (Node 1 (Node 3 Nil Nil) Nil)
c) subTree (Node 1 (Node 4 Nil Nil) Nil) (Node 5 (Node 1 (Node 4 Nil Nil) Nil) (Node 2 (Node 3
Nil Nil) Nil))
d) subTree (Node 1 (Node 4 Nil Nil) Nil) (Node 1 Nil Nil)
Ejercicio 2
Sea la siguiente definición:
puf :: Ord a => [a] -> Bool
puf = and . comb (zipWith (<=)) tail
where comb f g x = f x (g x)
La función puf retorna el valor True cuando se aplica a una lista que cumple :
a) Algún elemento de la lista es menor o igual que todos los siguientes.
b) Algún elemento de la lista es menor o igual que el elemento que le sigue.
c) La lista está ordenada de forma mónotona decreciente.
d) La lista está ordenada de forma mónotona creciente.
Ejercicio 3
Sean las funciones f y g con tipos:
f :: (a -> b -> c) -> b -> a -> c
g :: a -> [a]
Indicar cual de las siguienes expresiones tiene tipo (a -> b -> c) -> [b -> a -> c] (faltó en la
1
letra impresa)
a) g f
b) f g
c) f . g
d) g . f
Ejercicio 4
¿Cual de las siguientes expresiones está bien tipada?
a) uncurry (foldr (:))
b) uncurry . (foldr (:))
c) foldr (uncurry (:))
d) foldr (:) . uncurry
Ejercicio 5
Sean las siguientes definiciones:
scanl' :: (a -> b -> b) -> b -> [a] -> [b]
scanl' f st xs = ys where ys = st : zipWith f xs ys
Indique cuál de las siguientes afirmaciones es correcta:
a) (scanl' (*) 1 [1..]) es una lista finita
b) la evaluación de take 5 (scanl' (*) 1 [1..]) da como resultado [1,1,2,6,12]
c) takeWhile (> 0) (scanl' (*) 1 [1..]) es una lista infinita
d) (scanl' (*) 1 [1..]) es la lista [1,1 ..]
Ejercicio 6
Sea la siguiente definición:
dd :: Eq a => [a] -> [a]
dd []
= []
dd (x:y:xs) | x == y
= xs
| otherwise
= x : y : dd xs
Indicar cual es el resultado de evaluar (dd "xaaybbcd")
a) "xaaycd"
b) "xycd"
c) "xaaybbcd"
d) "xybbcd"
2
Ejercicio 7
Se considera la definición de clase:
class (Eq a, Show a) => Num a where
(+), (-), (*) :: a -> a -> a
negate, abs, signum
:: a -> a
fromInteger
:: Integer -> a
x - y = x + negate y
Indique cuál de las siguientes afirmaciones es correcta:
a) Toda instancia de Num debe definir la operación (-)
b) Toda instancia de Num debe definir la operación negate
c) Ninguna instancia de Num debe definir la operación (-)
d) La definición de negate es opcional.
Ejercicio 8
Sean las siguientes definiciones:
maybeX (Just n) xs = Just (xs !! n)
maybeX Nothing xs = Nothing
pos :: (Eq a) => a -> [a] -> Maybe Int
pos a xs
| ys /= [] = Just (head ys)
| otherwise = Nothing
where ys = [i | (i,j) <- zip [0 .. (length xs)] xs , j == a]
diagonal (ys:yss) = [ maybeX ? xs
| xs <- ys:yss]
matriz = [[1,2,3,4], [0,0,0,0], [5,6,7,8], [1,1,1,1]]
¿Qué expresión debe ir en ? para que el resultado de evaluar la expresión diagonal matriz sea
([Just 1, Just 0, Just 7, Just 1])?
a) (pos (ys:yss) xs)
b) (pos [1,2,3,4] (ys:yss))
c) (pos xs (ys:yss))
d) (yss !! pos ys yss)
Ejercicio 9
Indicar cuál es el tipo más general de la expresión:
\ f g x -> f (f x) (g x)
a) ((b -> b) -> b -> b) -> ((b -> b) -> b) -> (b -> b) -> b
b) ((a -> b) -> a -> b) -> ((a -> b) -> a) -> (a -> b) -> b
c) ((a -> b) -> a -> b) -> ((b -> b) -> a) -> (a -> b) -> b
d) ((a -> b) -> b -> b) -> ((b -> b) -> a) -> (a -> b) -> a
3
Ejercicio 10
Sea la definición:
f :: [Int] -> [Int] -> Int -> [Int]
f xs ys = \m -> case m `mod` 2 of
1 -> g [m] xs
0 -> g [m] ys
where g = foldr (:)
La evaluación de f [1,3,5] [0,2] 4 da como resultado:
a) [0,2,4]
b) [4,2,0]
c) [0,4,2]
d) [4,1,3,5]
Ejercicio 11
Sea la definición:
h = (filter (> "a") . map
(\s -> (:[])s))
¿Cual de las siguientes expresiones al ser evaluada da la lista vacía?
a) h "oso"
b) h "hola"
c) h "aaa"
d) h "ala"
Ejercicio 12
Sean las siguientes definiciones
heads :: [[a]] ­> [a] heads = map head tails :: [[a]] ­> [[a]] tails = map tail xs :: [[Int]] xs = [[1,2,3],[1]]
Considere las expresiones:
1) length (heads (tails xs))
2) length $ head $ tails $ tail xs
3) length (tail (heads (tails xs)))
Indique cuál de las siguientes afirmaciones es verdadera:
a) La expresión 1) produce un error cuando es evaluada
b) La expresión 2) produce un error cuando es evaluada
c) La expresion 3) produce un error cuando es evaluada
d) Ninguna de las 3 expresiones produce un error al ser evaluada.
4
Descargar