Un ejemplo de pereza causando problemas extraños (que me pasó hoy, en Haskell):
import System.IO
main = do
content <- readFile "foo.txt"
writeFile "foo.txt" content
Esto arroja el siguiente error cuando se compila & ejecutados:
foo.txt: openFile: resource busy (file is locked)
Lo que pensé que lo haría do: Abra el archivo foo.txt, lea el contenido, ciérrelo de nuevo. Luego ábralo para escribir, escriba el contenido y ciérrelo nuevamente.
Lo que realmente hizo: "Ah, algo de contenido. Probablemente lo lea más adelante cuando realmente lo necesitemos". Luego abra "foo.txt" para escribir. Comience a escribir contenido ... bien, ahora necesitamos el contenido. Abre foo.txt para leer - ¡bam!
Sé que es trivial de arreglar, pero es difícil de encontrar si no sabes dónde buscar.
La evaluación perezosa es una forma de obtener el rendimiento. – Zorf
Incorrecto. Si debe evaluar la respuesta, la sobrecarga adicional para la evaluación perezosa crea un costo sin beneficio. – vy32
vy32 es correcto. Por ejemplo, si tiene una lista de objetos que se muestran en una lista en un dispositivo móvil, la vista se creará en el momento en que los elementos de la lista aparezcan en la pantalla. Si algunos valores que se muestran en la lista tienen que cargarse vagamente, la lista se tambaleará y se demorará porque los nuevos elementos de lista no se pueden llenar con la suficiente rapidez. – Janusz