[Parcial 2019] Ejercicio de desarrollo

[Parcial 2019] Ejercicio de desarrollo

de Hugo Sebastian Rodriguez Reyes -
Número de respuestas: 4

Estimados,

Se toma como correcta la implementación del ejercicio de esta forma:

lookup x = foldl aux Nothing

   where

      aux (Just y2) _ = Just y2

      aux Nothing (y1,y2)

         | x == y1 = Just y2

         | otherwise = Nothing

La duda es más que nada lo que está en negrita, ya que al ver su solución, ustedes en vez de poner Nothing pusieron r.

Se toma correcto haber puesto Nothing?

   

En respuesta a Hugo Sebastian Rodriguez Reyes

Re: [Parcial 2019] Ejercicio de desarrollo

de Marcos Viera - InCo -

Se comporta exactamente igual a la solución...

En respuesta a Marcos Viera - InCo

Re: [Parcial 2019] Ejercicio de desarrollo

de Ana Laura Rodriguez Colesnik -

Buenas, yo llegué a esta solución:

lookup1 k = foldl func Nothing
   where func v xi
            | (v == Nothing && fst xi == k) = Just (snd xi)
            | otherwise = v

Si bien se comporta igual que la solución propuesta, no me coincide con el tipo y no me doy cuenta de por qué pasa esto.

lookup1 :: (Foldable t, Eq a1, Eq a2) => a2 -> t (a2, a1) -> Maybe a1

mientras que la función de la solución tiene tipo lookup :: (Foldable t, Eq a1) => a1 -> t (a1, a2) -> Maybe a2   (Este es el tipo inferido por Haskell)

No entiendo en qué momento estoy forzando a que la segunda componente de la tupla de la lista derive Eq. Probé cambiar xi por (x,y), pero me sigue pasando lo mismo. 

En respuesta a Ana Laura Rodriguez Colesnik

Re: [Parcial 2019] Ejercicio de desarrollo

de Marcos Viera - InCo -

Al hacer v == Nothing estás usando (==) para comparar dos elementos de tipo Maybe a1, por lo que se requiere de Eq a1.