Consulta filter

Consulta filter

de Ivan Alberto Najmias Marjovsky -
Número de respuestas: 3

Hola una consulta, entiendo porque head $ filter (<= 0) [0,2,4,6...] converge (porque esta el head), pero si no estuviera, esta convergería? Por lo único que puedo entender que converge es que es una lista ordenada entonces "se da cuenta" que no van a haber mas elementos menor o igual al 0 y devolvería [0] pero en caso de que sea una lista desordenada ahí si convergiría no? O siempre que filter se aplica a una lista infinita sin otra funcion (como head, o take...) esta converge? Gracias

En respuesta a Ivan Alberto Najmias Marjovsky

Re: Consulta filter

de Ivan Alberto Najmias Marjovsky -
Para agregar a la consulta, pasa algo parecido en el ejercicio 9 del parcial 2020, no entiendo porque la g diverge y la h converge
En respuesta a Ivan Alberto Najmias Marjovsky

Re: Consulta filter

de Marcos Viera - InCo -
La g diverge porque para poder calcular el length (y compararlo con 0) hay que computar toda la lista, que aunque es finita su proceso de producción es infinito.
La h converge porque para calcular null basta con saber si la lista tiene forma [] o (x:xs).

saludos
En respuesta a Ivan Alberto Najmias Marjovsky

Re: Consulta filter

de Marcos Viera - InCo -
Hola,

En realidad hacer filter (<= 0) [0,2,4,6...] es lo mismo que hacer [0,2,4,6...], que es un proceso de generación de una lista potencialmente infinita.
La función de filter no "se da cuenta" de que la condición no se va a cumplir, sino que va a ir generando elementos de la lista, a medida que se le requiera, y va a aplicar la condición.
El tema está en si quien usa el resultado de filter en algún momento para de consumir elementos o sigue por siempre.

saludos