Consulta Ejercicio de Autoevaluación

Consulta Ejercicio de Autoevaluación

de Rodrigo Gaston Nicodella Falero -
Número de respuestas: 3


Hola, quisiera saber como se interpreta esta definición ya que por lo q tengo entendido filter recibe una predicado y una lista.

En respuesta a Rodrigo Gaston Nicodella Falero

Re: Consulta Ejercicio de Autoevaluación

de Federico Sebastian Beltrame Filgueiras -
map :: (t0 -> t1) -> [t0] -> [t1]
filter :: (a0 -> Bool) -> [a0] -> [a0]
entonces
map filter :: [(a0 -> Bool)] -> [[a0] -> [a0]]
porque (t0 -> t1) = (a0 -> Bool) -> [a0] -> [a0] entonces t0 = (a0 -> Bool) y t1 = [a0] -> [a0]

map filter toma el array de funciones a evaluar y devuelve un array de funciones que aplican la funcion filtro pasada como parametro en dicha prosicion
es decir:
 map filter [filtro_1, ..., filtro_n] retorna [aplicacionfiltro1, ..., aplicacionfiltron]
donde aplicacionfiltro_i = filter filtro_i
entonces si se que cada posicion del array aplica un filtro, lo que quiero es componer cada una de esas aplicaciones, puede ser de derecha a izquierda a o viceversa.

Una opcion es pasar de la lista [aplicacionfiltro_1, ..., aplicacionfiltro_n] a la composicion (aplicacionfiltro_1 o ... o aplicacionfiltro_n)

Si le agrego la composicion con al funcion id a la derecha y lo veo asi:
aplicacionfiltro_1 . (aplicacionfiltro_2 . (...(aplicacionfiltro_n . id)...)) 
entonces este es un caso de foldr donde el fold se hace sobre la funcion (.) que es la composicion tomando la funcion id como valor inicial y este array de aplicaciones [aplicacionfiltro_1, ..., aplicacionfiltro_n] como al lista sobre la cual aplicar la composicion (que es igual a map filter [filtro_1, ..., filtro_n])
por lo cual nos queda:

foldr (.) id [aplicacionfiltro_1, ..., aplicacionfiltro_n] que es lo mismo que ...

foldr (.) id (map filter [filtro_1, ..., filtro_n]) que es lo mismo que ...
 
foldr (.) id (map filter xs) si la lista de filtros xs :: [a -> Bool] se pasa como parametro y por esto se define

multifilter = foldr (.) id (map filter xs) :: [a0 -> Bool] -> [a0] -> [a0] 
a la cual le pasas tu lista de funciones de filtro para el tipo a, y devuelve una funcion que al pasarle un array de tipo a devuelve el array con los filtros aplicados uno atras del otro
En respuesta a Federico Sebastian Beltrame Filgueiras

Re: Consulta Ejercicio de Autoevaluación

de Marcos Viera - InCo -
Hola,

La explicación de Federico es correcta, salvo que cambiaría la palabra "array" por "lista" :-)

saludos