[Ej de autoevaluación Definiciones y tipos de datos algebraicos] Duda de como analizar (map filter ps)

[Ej de autoevaluación Definiciones y tipos de datos algebraicos] Duda de como analizar (map filter ps)

de Pablo Dalchiele Gonzalez -
Número de respuestas: 2

El ejercicio plantea este foldr:

raro ps = foldr (.) id (map filter ps)

y pide ver a qué evalúa raro [const True, (<2), (>3)] [1,2,3,4]

La respuesta correcta es [] y es medio intuitivo pero nos trancamos tratando de analizarlo aplicando las definiciones de foldr, map y filter.

filter :: (a -> Bool) -> [a] -> [a]

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

foldr :: (a -> b -> b) -> b -> [a] -> [b]

Aplicando lo que se pide, raro [const True, (<2), (>3)] [1,2,3,4] = foldr (.) id (map filter [const True, (<2), (>3)]) [1,2,3,4]

Aqui como seria la aplicacion? Porque map espera una funcion y una lista, seria filter la funcion y [const True, (<2), (>3)] la lista? De todas formas luego no sabemos como seguir...

Gracias!


En respuesta a Pablo Dalchiele Gonzalez

Re: [Ej de autoevaluación Definiciones y tipos de datos algebraicos] Duda de como analizar (map filter ps)

de Sandra Paganini Fajardo -

hola,  yo lo veo asi: 


foldr (.) id (map filter [const True, (<2), (>3)]) [1,2,3,4]

resuelvo primero lo que esta en negrita y el resultado, lo llamo e y luego aplico el folder (.) id [e]

slds sandra 

En respuesta a Sandra Paganini Fajardo

Re: [Ej de autoevaluación Definiciones y tipos de datos algebraicos] Duda de como analizar (map filter ps)

de Pablo Dalchiele Gonzalez -

Gracias! Pero en realidad nosotros llegamos a la solucion al final haciendo foldr (.) id (map filter [const True, (<2), (>3)])  que resulta aplicando la definicion de map en foldr (.) id foldr (.) id ([filter const True, filter (<2), filter (>3)])  y luego aplicando la definicion de foldr en

(filter const True) . (filter (<2)) . (filter (>3)) . id  y luego al aplicar esa composicion de funciones a [1,2,3,4] resulta en []