runhaskell
の下でプログラムを実行しているときに、パフォーマンス異常が発生していることを理解しようとしています。Runhaskellパフォーマンス異常
問題のプログラムは次のとおりです。私はこれを実行すると、それは1.18秒を
isFactor n = (0 ==) . (mod n)
factors x = filter (isFactor x) [2..x]
main = putStrLn $ show $ sum $ factors 10000000
かかります。
しかし、私はisFactor
として再定義した場合:
isFactor n f = (0 ==) (mod n f)
は、プログラムは17.7秒かかります。
これはパフォーマンスに大きな違いがあり、私はプログラムが同等であることを期待しています。誰かが私がここで行方不明を知っていますか?
注:これはGHCでコンパイルした場合は発生しません。
私の推測では、runhaskellはほんのわずかな最適化を実行するので、2番目のものは特定の厳密性の問題があります。 – fuz