でプログラムを実行したときに観察されるパフォーマンス異常を理解しようとしてい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 でコンパイルした場合には発生しません。