Estoy tratando de comprender una anomalía de rendimiento que se observa cuando se ejecuta un programa en runhaskell
.Anomalía de rendimiento Runhaskell
El programa en cuestión es:
isFactor n = (0 ==) . (mod n)
factors x = filter (isFactor x) [2..x]
main = putStrLn $ show $ sum $ factors 10000000
Cuando ejecuto esto, se tarda 1,18 segundos.
Sin embargo, si redefino isFactor
como:
isFactor n f = (0 ==) (mod n f)
continuación, el programa toma 17,7 segundos.
Esa es una gran diferencia en el rendimiento y espero que los programas sean equivalentes. ¿Alguien sabe lo que me falta aquí?
Nota: Esto no ocurre cuando se compila bajo GHC.
Supongo que como runhaskell realiza solo unas pocas optimizaciones, la segunda sufre ciertos problemas de rigor. – fuz