【发布时间】:2012-07-13 23:17:30
【问题描述】:
我是通过阅读和解决 Project Euler 问题来编程和学习 Haskell 的新手。当然,要提高这些问题的性能,最重要的是使用更好的算法。但是,我很清楚,还有其他简单且易于实施的方法来提高性能。粗略搜索了this question 和this question,它们给出了以下提示:
- 使用 ghc 标志 -O2 和 -fllvm。
- 使用 Int 类型而不是 Integer,因为它是未装箱的(或者甚至是 Integer 而不是 Int64)。这需要键入函数,而不是让编译器即时决定。
- 使用 rem 而不是 mod 进行分区测试。
- 在适当的时候使用Schwartzian transformations。
- 在递归函数中使用累加器(我相信是尾递归优化)。
- 记忆 (?)
(一个答案还提到了工人/包装器转换,但这似乎相当先进。)
问题:在 Haskell 中可以进行哪些其他简单的优化来提高 Project Euler 式问题的性能?是否有任何其他特定于 Haskell(或特定于函数式编程?)的想法或功能可用于帮助加快解决 Project Euler 问题的速度?相反,应该注意什么?有哪些常见但低效的事情要避免?
【问题讨论】:
标签: performance haskell