Auto evaluación - Definiciones

Auto evaluación - Definiciones

de Rodrigo Alain De La Vega Rodriguez -
Número de respuestas: 1

Buenas estoy tratando de hacer esta pregunta razonando como el call by need trabajaría pero me quede trancado ya que no logro interpretar como se logra aplicar el filter con todas esas funciones compuestas y con filters adentro.




Lo que tengo hecho es:

--raro [const True,(<2),(>3)] [1, 2, 3, 4]

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

El resultado lo se porque lo puse en el ghci no porque haya logrado resolverlo.

Lo que me entrevera es pensar como se aplica este filter a cada elemento de la lista ya que para mi quedaría:
[ (const True) (.) ( filter (<2) (.) ( filter (>3) (.) id ) ) 1,  (const True) (.) ( filter (<2) (.) ( filter (>3) (.) id ) ) 2, 3, 4] y asi sucesivamente, 
pero claro; lo que me pasa es que luego me quedan filters aplicado a elementos y no a listas.
Que estoy haciendo mal?

Gracias!


En respuesta a Rodrigo Alain De La Vega Rodriguez

Re: Auto evaluación - Definiciones

de Alberto Pardo -
Hola,

Estuviste cerca de resolver bien la expresión. Lo que pasa es que tenés mal la parentización en la expresión
filter ( (const True) (.) ( filter (>3) (.) id ) ) ) [1, 2, 3, 4].

El resultado de
foldr (.) id [filter (const True), filter (<2), filter (>3)] [1, 2, 3, 4]
es una cadena de composiciones aplicado a [1, 2, 3, 4].

Fijate que:
foldr (.) id [filter (const True), filter (<2), filter (>3)]
= filter (const True) . foldr (.) id [filter (<2), filter (>3)]
= filter (const True) .  filter (<2) . foldr (.) id [filter (>3)]
= filter (const True) .  filter (<2) . filter (>3) . foldr (.) id []
= filter (const True) .  filter (<2) . filter (>3) . id

La expresión final es entonces:
filter (const True) .  filter (<2) . filter (>3) . id $ [1,2,3,4]

O sea, la lista pasa a través de la cadena de filters.

Saludos,
Alberto.