我试图了解在runhaskell
下运行程序时观察到的性能异常。Runhaskell性能异常
该方案的问题是:
isFactor n = (0 ==) . (mod n)
factors x = filter (isFactor x) [2..x]
main = putStrLn $ show $ sum $ factors 10000000
当我运行它,它需要1.18秒。
但是,如果我重新定义isFactor
为:
isFactor n f = (0 ==) (mod n f)
则程序取17.7秒。
这是一个巨大的性能差异,我希望程序是等效的。有人知道我在这里错过了什么吗?
注意:在GHC下编译时不会发生这种情况。
我的猜测是,由于runhaskell只进行少量的优化,所以第二个会遇到某些严格问题。 – fuz 2012-02-17 08:52:45