Preguntas seleccionadas de pruebas de evaluación Pregunta 1 Dadas las siguientes definiciones: data Tree a = Tip Node a (Tree a) (Tree a) deriving Show cambiar :: [Int] -> Tree [Int] -> Tree [Int] cambiar _ Tip = Tip cambiar [] (Node xs t1 t2) = Node (reverse xs) (cambiar [] t1) (cambiar [] t2) cambiar (x:xs) (Node ys t1 t2) = Node (x:xs) (cambiar (x:xs) t2) (cambiar (x:xs) t1) La evaluación de la expresión: cambiar [1,2,3] (Node [-1,-2,-3] (Node [0] Tip Tip) (Node [4,8] Tip Tip)) da como resultado: Pregunta 2 Sea la expresión: a) Node [0] (Node [1,2,3] Tip Tip) (Node [1,2,3] Tip Tip) b) Node [1,2,3] (Node [1,2,3] Tip Tip) (Node [1,2,3] Tip Tip) c) Node [3,2,1] (Node [3,2,1] Tip Tip) (Node [3,2,1] Tip Tip) d) Node [] (Node [] Tip Tip) (Node [] Tip Tip) tata = map (mod 0) [1,2,0,7,8] Indique cuáles de las siguientes expresiones produce un error al ser evaluada Pregunta 3 a) last tata b) head tata c) foldl (*) 3 tata d) length tata Sea la siguiente definición lolo g x = ys where ys = [x] ++ filter (curry g x) ys El tipo de la función lolo es: a) (a,b) -> Bool -> b -> [(a,b)] b) (b -> b -> b) -> Bool -> [b] c) ((b,b) -> Bool) -> b -> [b] d) (a -> b -> Bool) -> b -> [c] Pregunta 4 La expresión take 5 (lolo (uncurry (==)) 1) da como resultado: a) [] b) [(1,1), (1,1), (1,1), (1,1), (1,1)] c) [1, 1, 1, 1, 1] d) [((((1,1), 1), 1), 1)]
Pregunta 5 Considere las siguientes expresiones: i) (foldr (.)) ii) ((.) foldr) iii) (foldr. (.)) iv) ((.). foldr) Indique cuál de las siguientes afirmaciones es correcta: Pregunta 6 a) (ii) no tiene tipo y todas las otras sí. b) (iii) y (iv) tienen tipo y las otra no. c) Ninguna de las expresiones tiene tipo. d) Todas las expresiones tienen tipo. Se consideran las siguientes expresiones: a) (flip.) b) (. flip) c) (.) flip d) (.) $ flip e) flip $ (.) Indique cuál de las siguientes afirmaciones es correcta: a) Las expresiones b) y c) tienen el mismo tipo b) Las expresiones c) y d) tienen el mismo tipo c) La expresión d) no tiene tipo d) Las expresiones e) y a) tienen el mismo tipo Pregunta 7 Sea la expresión foldl ope 0 [5,7,3] where ope n x = 10 * n + x Cual de las siguientes afirmaciones acerca de la evaluación de la expresión es correcta? Pregunta 8 a) el resultado es el mismo si cambiamos foldl por foldr b) el resultado es [5,7,3] c) el resultado es [3,7,5] d) el resultado es 573 Dada la siguiente definición, indique cuál de las siguientes afirmaciones es correcta: fibs ::[Int] fibs = 0 : 1 : zipwith (+) fibs (tail fibs) a) fibs define una lista finita b) La evaluación de fibs produce un error de tipo c) fibs define la lista de los números de Fibonacci d) fibs define una lista infinita de números impares
Pregunta 9 Sea la siguiente definición de función: pepe _ [] = [] pepe y (x:xs) y == x = xs' otherwise = y:xs' where xs' = pepe y xs El tipo más general para esta función es: Pregunta 10 a) (Eq a) => a -> [a] -> [a] b) Int -> [Int] -> [Int] c) (Eq a, Eq b) => b -> [a] -> [a] d) (Ord a) => a -> [a] -> [a] Indique cuál de las siguientes expresiones no tiene tipo (la función pepe está definida en la pregunta 9): Pregunta 11 a) (pepe "hola") b) (pepe "hola" "chau") c) (pepe. head) d) (map. pepe) Indique cuál de las siguientes afirmaciones es correcta (la función pepe está definida en la pregunta 9) Pregunta 12 a) (pepe 'a' "hol")>>> da como resultado "hola" b) (pepe 1 [1,1,1,1])>>> da el mismo resultado que pepe 1 [1] c) (pepe 1 [1,2])>>> da como resultado [] d) (pepe 1 [2])>>> da como resultado [2] Considere la siguiente definición: foo :: (Num a) => Int -> a -> a foo 0 = constante 1 foo (n+1) = combinar (*) (foo n) constante x _ = x combinar f g x = f x (g x) El resultado de la evaluación de (foo 4 2) es a) 16 b) 4 c) 2 d) 8
Pregunta 13 Sea la siguiente definición: cc xs ys = [ x x <- xs, y <- ys, x <= y] Indicar cuál es el resultado de evaluar la expresión: let us = [1,1] in cc us us a) [] b) [1,1,1] c) [1,1,1,1] d) [1,1] Pregunta 14 Sea la siguiente definición: f xs = [i i <- xs, (i,j) <- map (\y -> (i,y)) xs, i > j] Cual es el resultado de evaluar f [1,2,3]? Pregunta 15 a) [2,3] b) [2,3,3] c) [3,3,3] d) [1,2,3] Dada la expresión e = (foldr (++). map (:)) [1,2,3] [[filter even]] Cuál de las siguientes afirmaciones es correcta: a) e no tiene tipo b) head e [5,6] es [6] c) el tipo de e es [[Integer]] -> [[Integer]] d) head e [] es [[]] Pregunta 16 Sea la definición posi a l l1 /= [] = Just (head l1) otherwise = Nothing where l1 = [i (i,j) <- zip [0.. (length l)] l, j == a] Indique el tipo más general de posi: a) Maybe Int -> [Int] -> Maybe Int b) (Eq a) => a -> [a] -> Maybe Int c) (Eq a) => a -> [a] -> Maybe a d) Maybe a -> [Maybe a] -> Maybe Int
Pregunta 17 Dada la expresión zipwith. uncurry, cuál de las siguientes afirmaciones es correcta? a) el tipo de la expresión es [a -> b -> c] -> [(a,b)] -> [c] b) el tipo de la expresión es (a -> b -> c -> d) -> [(a,b)] -> [c] -> [d] c) la expresión no tiene tipo d) el tipo de la expresión es (a -> b -> c) -> ([a],[b]) -> [c] Pregunta 18 Pregunta 19 Se considera la siguiente definición de árboles data Rose a = Fork a [Rose a] Se quiere definir la función member, que verifica si un elemento aparece en un árbol member :: Eq a => a -> Rose a -> Bool Indique cuál de las siguientes definiciones de member es correcta: a) member a (Fork r ts) = if a == r then True else elem r ts b) member a (Fork r ts) = a == r map (==a) ts c) member a (Fork r ts) = r == a any (member a) ts d) member a (Fork r ts) = if a==r then True else member a ts Sea la siguiente expresión: (!!) (scanl mod 1 [0..4]) 1 Cuál de las siguientes afirmaciones es correcta? Pregunta 20 a) la evaluación de la expresión produce un error b) la evaluación de la expresión da como resultado 0 c) la expresión no tiene tipo d) la evaluación de la expresión da como resultado 1 Sea la siguiente definición: f xss = \a -> let ope x y = x ++ [a] ++ y in foldr1 ope xss Cuál es el resultado de evaluar f [[1,3],[2,4], [0,9,8]] 5? a) [[1,5,3], [2,5,4],[0,5,9,5,8]] b) [[1,3],[5],[2,4],[5], [0,9,8]] c) [1,3,5,2,4,5,0,9,8] d) [[1,3,5,2,4,5,0,9,8]]
Pregunta 21 Dadas las siguientes definiciones: data Nat = Cero Suc Nat instance Show Nat where show Cero = "0" show (Suc Cero) = "1" show (Suc n) = "1 + " ++ (show n) ++ "\n" suma :: Nat -> Nat-> Nat suma Cero n = n suma (Suc n) m = Suc (suma n m) Cuál de las siguientes afirmaciones es correcta? a) el tipo de suma debe ser (Show Nat) => Nat -> Nat-> Nat b) las definiciones son correctas c) en la declaración del tipo falta deriving Show d) el tipo de suma debe ser (Num Nat) => Nat -> Nat-> Nat