Duda sobre ejercicio

Duda sobre ejercicio

de Franco Danilo Wanseele Gonzalez -
Número de respuestas: 2

Hola que tal? Mirando una prueba vieja del 2007 me surgieron dos dudas con dos ejercicios. 

Uno de ellos dice lo siguiente:


la solución correcta es la E. Lo que no entiendo es porque no puede ser la D. Mi razonamiento fue el siguiente: si aplico la definición de foldl me quedaría algo como 

(...( ( (v 'f' a1) 'f' a2)... 'f' an) ; suponiendo ai elementos de la lista.

Si la lista es vacía la función f recibe como primer parámetro v y nada como segundo parámetro, en ese caso no retornaría error sea cual sea v? O en ese caso se devuelve el valor de v (si es así porque)?

---

Aprovecho a consultar una duda más, en el ejercicio 9 se da como verdadero lo siguiente:

 elem = not . null . filter (==)

teniendo en cuenta la definición de filter y de (==) 

 filter :: (a->Boll)->[a]->[a] ; (==) :: a -> a -> Bool

la definición de (==) no corresponde a la definición de (a->Bool) que recibe como entrada la función filter, eso no daría error?

--

Gracias por el 2x1 en dudas (:

En respuesta a Franco Danilo Wanseele Gonzalez

Re: Duda sobre ejercicio

de Marcos Viera - InCo -

Hola,


Pregunta 10.

En el caso D, ante la lista vacía retornaría 0. foldl se puede implementar:

foldl :: (b -> a -> b) -> b -> [a] -> b 
foldl f v [ ] = v 
foldl f v (x : xs) = foldl f (f v x) xs

y representa, como decís, el hacer (..((v `f` a1) `f` a2).. `f` an). Pero si n es 0, entonces no se aplica f y se retorna directamente v.


Pregunta 9.

Está bien lo que decís, eso daría un error.

La implementación correcta sería:

elem e = not . null . filter (== e)