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
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]
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.
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)...))
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:
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
La explicación de Federico es correcta, salvo que cambiaría la palabra "array" por "lista" :-)
saludos
En respuesta a Marcos Viera - InCo
Re: Consulta Ejercicio de Autoevaluación
Muchas gracias!