Próbuję zrozumieć występującą anomalię wydajności podczas uruchamiania programu pod numerem runhaskell
.Anomalia wydajności Runhaskella
Program w pytaniu:
isFactor n = (0 ==) . (mod n)
factors x = filter (isFactor x) [2..x]
main = putStrLn $ show $ sum $ factors 10000000
Kiedy uruchomić ten, trwa 1,18 sekundy.
Jednak gdybym przedefiniować isFactor
jak:
isFactor n f = (0 ==) (mod n f)
następnie program trwa 17,7 sekundy.
To ogromna różnica w wydajności i oczekuję, że programy będą równoważne. Czy ktoś wie, czego tu brakuje?
Uwaga: Nie dzieje się to podczas kompilacji w ramach GHC.
Domyślam się, że jak Runhaskell wykonuje tylko kilka optymalizacji, drugi cierpi na pewne problemy ze ścisłością. – fuz