En un lenguaje funcional puro con semántica perezosa (como Haskell), los resultados de los cálculos se memorizan para que las evaluaciones posteriores de una función con las mismas entradas no vuelvan a calcular el valor, sino que lo obtienen directamente del caché de valores memorizados.¿Cuál es la duración de un valor memorable en un lenguaje funcional como Haskell?
Me pregunto si estos valores memoizados se reciclan en algún momento.
- Si es así, significa que los valores memorizados se deben volver a calcular en otro momento, y los beneficios de la memorización no están saliendo de mi humilde opinión.
- Si no, entonces bien, esto es inteligente para almacenar en caché todo ... pero ¿significa que un programa, si se ejecuta durante un período de tiempo suficientemente largo, siempre consumirá más y más memoria?
imaginar un programa que realiza el análisis numérico intensivo: por ejemplo, para encontrar las raíces de una lista de cientos de miles de funciones matemáticas utilizando un algoritmo dicotomía.
Cada vez que el programa evalúa una función matemática con un número real específico, el resultado será memorizado. Pero solo existe una probabilidad muy pequeña de de que exactamente el mismo número real aparezca de nuevo durante el algoritmo, dando lugar a una pérdida de memoria (o al menos, un mal uso).
Mi idea es que los valores tal vez memoized son simplemente "scoped" a algo en el programa (por ejemplo, para la continuación actual, la pila de llamadas, etc.), pero fue incapaz de encontrar algo práctico sobre el tema.
Admito que no he analizado detenidamente la implementación del compilador Haskell (¿perezoso?), Pero, por favor, ¿podría alguien explicarme cómo funciona en la práctica?
EDIT: Ok, entiendo que mi error desde las primeras respuestas: pura semántica implica Referencial Transparencia que a su vez no implica memoization automática, pero sólo garantiza que no habrá ningún problema con él.
Creo que algunos artículos en la web son engañosos acerca de esto, porque desde el punto de vista de un principiante, parece que la propiedad de Transparencia Referencial es tan buena porque permite la memorización implícita.
Ver http://stackoverflow.com/questions/3951012/when-is-memoization-automatic-in-ghc-haskell –