我是通过阅读和处理Project Euler问题来编程和学习Haskell的新手。当然,为了提高这些问题的性能,可以做的最重要的事情就是使用更好的算法。但是,我很清楚,还有其他简单易行的方法来提高性能。长大this question粗略搜索,并且this question,这给了以下建议:Haskell性能提升的简单提示(关于ProjectEuler问题)?
- 使用GHC的标志-02和-fllvm。
- 使用类型Int而不是Integer,因为它是非盒装的(甚至是Integer而不是Int64)。这需要输入函数,而不是让编译器即时决定。
- 使用rem,not mod,进行分割测试。
- 适当时使用Schwartzian transformations。
- 在递归函数中使用累加器(我相信是一个尾递归优化)。
- 记忆化
(一个答案也提到了工人/包装改造,但似乎相当先进的。)
问号(?):可以在Haskell做什么其他简单的优化,以提高性能关于项目欧拉式问题?是否还有其他Haskell特定(或功能性编程特定?)的想法或功能可用于帮助加快Project Euler问题的解决方案?相反,应该注意什么?什么是一些常见但效率低下的事情需要避免?
哇,很好的链接。谢谢。 – identity 2012-07-14 12:58:59
同一作者的早期幻灯片http://blog.johantibell.com/2010/09/slides-from-my-high-performance-haskell.html更广泛;和http://johantibell.com/files/stanford-2011/performance.html是一个案例研究。有相当多的重叠,但它没有造成任何伤害。 – applicative 2012-07-14 17:46:22