Prueba Escrita. Programación Funcional. 2009 Nombre: CI

Anuncio
Prueba Escrita. Programación Funcional. 2009
Nombre:
CI:
Pregunta 1
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)
b)
c)
d)
el tipo de suma debe ser (Show Nat) => Nat -> Nat-> Nat
las definiciones son correctas
en la declaración del tipo falta ”deriving Show”
el tipo de suma debe ser (Num Nat) => Nat -> Nat-> Nat
Pregunta 2
Dadas las siguientes definiciones de la función que toma una lista y devuelve
el último elemento:
ult (x:xs) = if null xs then x else ult xs
ult1 (x:xs) = if xs == [] then x else ult1 xs
¿Cuál de las siguientes afirmaciones es correcta?
a)
b)
c)
d)
el tipo más general de ambas es [a] -> a
ult1 está definida para la lista vacía y ult no
Las funcionas no tienen el mismo tipo
ult [Suc Cero] y ult1 [Suc Cero] evalúan ambas a Suc Cero
(Suc Cero es elemento del tipo Nat de la pregunta 1)
Pregunta 3
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)
b)
c)
d)
[[1,5,3], [2,5,4],[0,5,9,5,8]]
[[1,3],[5],[2,4],[5], [0,9,8]]
[1,3,5,2,4,5,0,9,8]
[[1,3,5,2,4,5,0,9,8]]
Pregunta 4
Sea la expresión serie = 1 : map (\x -> x * (x+1)) serie
¿Cuál de las siguientes afirmaciones es correcta?
a) La definición anterior no compila correctamente
b) la expresión (serie!!4) da como resultado 1806
c) La definición anterior es equivalente a
serie = zipWith (*) [1 ..] [2..]
d) el resultado de la evaluación de serie es una lista finita
Pregunta 5
Sea la siguiente expresión: (!!) (scanl mod 1 [0..4]) 1
¿Cuál de las siguientes afirmaciones es correcta?
a)
b)
c)
d)
la
la
la
la
evaluación de la expresión produce un error
evaluación de la expresión da como resultado 0
expresión no tiene tipo
evaluación de la expresión da como resultado 1
Pregunta 6
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)
b)
c)
d)
member
member
member
member
a
a
a
a
(Fork
(Fork
(Fork
(Fork
r
r
r
r
ts)
ts)
ts)
ts)
=
=
=
=
if a == r then True else elem r ts
a == r || map (==a) ts
r == a || any (member a) ts
if a==r then True else member a ts
Pregunta 7
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 8
Dada la expresión e = (foldr (++) . map (:)) [1,2,3] [[filter even]]
Cuál de las siguientes afirmaciones es correcta:
a)
b)
c)
d)
e no tiene tipo
head e [5,6] es [6]
el tipo de e es [[Integer]] -> [[Integer]]
head e [] es [[]]
Pregunta 9
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)
b)
c)
d)
Maybe Int -> [Int] -> Maybe Int
(Eq a) => a -> [a] -> Maybe Int
(Eq a) => a -> [a] -> Maybe a
Maybe a -> [Maybe a] -> Maybe Int
Pregunta 10
Se consideran las siguientes expresiones:
a)
b)
c)
d)
e)
(flip .)
(. flip)
(.) flip
(.) $ flip
flip $ (.)
Indique cuál de las siguientes afirmaciones es correcta:
a)
b)
c)
d)
Las expresiones
Las expresiones
La expresión d)
Las expresiones
b)
c)
no
e)
y c) tienen el mismo tipo
y d) tienen el mismo tipo
tiene tipo
y a) tienen distinto tipo
Pregunta 11
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)
c)
d)
[]
[1,1,1]
[1,1,1,1]
[1,1]
Pregunta 12
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)
b)
c)
d)
16
4
2
8
Descargar