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
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
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
La h converge porque para calcular null basta con saber si la lista tiene forma [] o (x:xs).
saludos
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
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