Creación de listas e imagino lazy evaluation

Creación de listas e imagino lazy evaluation

de Diego Javier Rodriguez Uranga -
Número de respuestas: 1

Alguien me puede ayudar a entender por qué esto no falla?

[r | z <- [], r <- [1..z]]

Yo imaginaría que al no haber nada para z, la expresión r <- [1..z] fallaría, pero en vez la expresión total devuelve una lista vacía. No entiendo qué está pasando de fondo aquí para que devuelva lista vacía en vez de una excepción.

En respuesta a Diego Javier Rodriguez Uranga

Re: Creación de listas e imagino lazy evaluation

de Luis Sierra -
hola diego,

Creo que es más fácil de entender si considerás la siguiente forma de construír
la lista de los pares menores que diez.

[ r | z <- [1..10], even z]

qué pasaría si la lista considerada no fuera [1..10] sino la lista vacía?

[ r | z <- [], even z]

deberíamos devolver la lista de todos los pares que están en la lista vacía;
eso no es un error, simplemente es la lista vacía. por qué even z no da error, viendo que z no puede haber recibido un valor? simplemente porque nunca se consideró even z, ya que no había nada que considerar.

de igual forma, nunca se consideró la r <- [1..z], y por lo tanto nunca hubo ningún r que poner en la lista a devolver.

luis