No está seguro de qué es exactamente a Google por esta cuestión, por lo que voy a publicar directamente al SO:optimización de la función de llamadas en Haskell
- variables en Haskell son inmutables
- funciones puras deberían dar lugar a los mismos valores para los mismos argumentos
a partir de estos dos puntos es posible deducir que si se llama somePureFunc somevar1 somevar2
en su código dos veces, que sólo tiene sentido para calcular el valor en la primera llamada. El valor resultante puede almacenarse en una especie de tabla hash gigante (o algo así) y buscarse durante las siguientes llamadas a la función. Tengo dos preguntas:
- ¿GHC realmente hace este tipo de optimización?
- Si lo hace, ¿cuál es el comportamiento en el caso en que es más barato repetir el cálculo que buscar los resultados?
Gracias.
Dudo que necesites una "tabla hash gigante" a menos que desees optimizar situaciones donde dos variables independientes suceden dos tienen los mismos valores, pero eso no vale la pena el esfuerzo e incluso menos útil por el hecho de que los argumentos de función ganaron t se evaluará completamente con frecuencia (es decir, no se puede comprobar si son realmente iguales, al menos no sin desperdiciar ese precioso tiempo de cálculo que desea usar). – delnan
Vea esto not-a-faq http://stackoverflow.com/questions/5898162/what-is-the-lifetime-of-a-memoized-value-in-a-functional-language-like-haskell –