Haskell Lazy Evaluación y reutilización
Sé que si tuviera que calcular una lista de cuadrados en Haskell, podría hacer esto:
squares = [ x ** 2 | x <- [1 ..] ]
Luego, cuando llamo cuadrados como este:
print $ take 4 squares
Y se imprimiría [1.0, 4.0, 9.0, 16.0]. Esto se evalúa como [1 ** 2, 2 ** 2, 3 ** 2, 4 ** 2]. Ahora, dado que Haskell es funcional y el resultado sería el mismo cada vez, si volviera a llamar a los cuadrados en otro lugar, ¿volvería a evaluar las respuestas que ya se calcularon? Si tuviera que reutilizar cuadrados después de haber llamado a la línea anterior, ¿volvería a calcular los primeros 4 valores?
print $ take 5 squares
¿Evaluaría [1.0, 4.0, 9.0, 16.0, 5 ** 2]?