我正在尝试理解在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编译时不会出现这种情况。