Dadas las siguientes definiciones:
a = map repeat b
b = 1 : map (+1) b
c = reverse a
Para cada una de las siguientes expresiones indique el resultado de su evaluaci´on o si la misma diverge.
(a) (take 8 a)
Por qué tal opción diverge?
Dadas las siguientes definiciones:
a = map repeat b
b = 1 : map (+1) b
c = reverse a
Para cada una de las siguientes expresiones indique el resultado de su evaluaci´on o si la misma diverge.
(a) (take 8 a)
Por qué tal opción diverge?
Lo que sucede en ese caso es que obtengo una lista que tiene 8 listas infinitas.
Si quiero imprimir el resultado de esa expresión, me voy a pasar toda la vida imprimiendo los elementos de la primera lista (todos 1s).
La evaluación perezosa no debería hacer que se retorne [repeat 1, repeat 2, repeat 3, ...] ?
O entonces "take n" calcula cada uno de los n elementos en su totalidad antes de retornarlos?
En realidad se retorna lo que el consumidor del take luego requiera, pero si queremos mostrar el resultado de la evaluación (por ejemplo poniendo esa expresión en el intérprete), lo que veríamos serían infinitos unos.
Clarísimo! Gracias