Soy nuevo en la programación y el aprendizaje de Haskell leyendo y resolviendo problemas de Project Euler. Por supuesto, lo más importante que uno puede hacer para mejorar el rendimiento en estos problemas es usar un mejor algoritmo. Sin embargo, es claro para mí que hay otras formas simples y fáciles de implementar para mejorar el rendimiento. Una búsqueda superficial criado this question y this question, que dan los siguientes consejos:¿Se mejoran los consejos simples para el rendimiento de Haskell (en problemas de ProjectEuler)?
- uso de las banderas de GHC -O2 y -fllvm.
- Utilice el tipo Int, en lugar de Entero, porque está desagrupado (o incluso entero en lugar de Int64). Esto requiere escribir las funciones, sin dejar que el compilador decida sobre la marcha.
- Use rem, no mod, para las pruebas de división.
- Use Schwartzian transformations cuando corresponda.
- Uso de un acumulador en funciones recursivas (una optimización de recursión de cola, creo).
- memoization
(Una respuesta también menciona trabajador/transformación envoltorio, pero que parece bastante avanzada.)
de interrogación (?): ¿Qué otras optimizaciones sencilla se puede hacer en Haskell para mejorar el rendimiento en los problemas de estilo Proyecto Euler? ¿Hay alguna otra idea o característica específica de Haskell (o ¿específica de la programación funcional?) Que pueda usarse para ayudar a acelerar las soluciones a los problemas del Proyecto Euler? Por el contrario, ¿qué debería uno tener cuidado? ¿Cuáles son algunas cosas comunes pero ineficientes que deben evitarse?
Guau, excelente enlace. Gracias. – identity
Las diapositivas anteriores del mismo escritor http://blog.johantibell.com/2010/09/slides-from-my-high-performance-haskell.html son más extensas; y http://johantibell.com/files/stanford-2011/performance.html es una especie de estudio de caso. Hay una superposición considerable, pero no me hizo ningún daño. – applicative