Prueba 2018 - Ejericio 3

Prueba 2018 - Ejericio 3

de Veronica Dahiana Bentancor Cedrez -
Número de respuestas: 4

Hola, tengo una duda de este ejercicio en cuanto a las opciones B y C,

Es correcto si descarto la opción C porque no puedo hacer zip f de una lista ?

Y esta bien que descarte la opción B porque a zipWith debería pasarle dos listas y  map solo recibe una lista?


Gracias, saludos!

En respuesta a Veronica Dahiana Bentancor Cedrez

Re: Prueba 2018 - Ejericio 3

de Marcos Viera - InCo -

En la opción C, zip toma dos listas, y sin embargo f es una función.

En la opción B, es correcto lo que decís, que a (zipWith f) debería pasarle dos listas.

En respuesta a Marcos Viera - InCo

Re: Prueba 2018 - Ejericio 3

de Pablo Dalchiele Gonzalez -

Nosotros también tenemos duda en este ejercicio, cómo es que se deduce que el tipo de map' es igual al de map?

Entendemos que map :: (a -> b) -> [a] -> [b]

para que map' sea del mismo tipo, el tipo de zip (repeat f) debería ser [a] ya que map (uncurry ($)) tiene el primer parametro ( (a -> b) ) saturado, o sea map (uncurry ($)) :: [a] -> [b] pero zip :: [a] -> [b] -> [(a,b)]  y  repeat :: a -> [a]

y no sabemos como seguir, o sea como vemos que zip le este retornando al map la lista [ a] que esta esperando el map (uncurry ($))  ?

Espero se entienda, gracias!

En respuesta a Pablo Dalchiele Gonzalez

Re: Prueba 2018 - Ejericio 3

de Marcos Viera - InCo -

Pero como la función que le pasas a map es (uncurry ($)), entonces se debe refinar el tipo a:

map (uncurry ($)) :: [(a->b,a)] -> [b]


El zip toma dos listas y retorna una lista de pares, que es justamente lo que toma la función que vimos.

Como el zip está parcialmente aplicado, sólo resta pasarle una lista.