Why My Haskell Code is so slow compare to Swift and C
本问题已经有最佳答案,请猛点这里访问。
这里是一个非常简单的haskell代码,用于查找从1到200的所有毕达哥拉斯整数,满足毕达哥拉斯定理x^2=y^2+z^2。
Haskell:
1 2 | let l = [1..200] let pythagoras = [ x | x <- l, y <- l, z <- l, x^2 == y^2 + z^2] |
完成它需要24.1秒,
Swift:循环使用标准0.05秒
丙:循环使用标准0.022秒
我测量了在
1 2 3 4 5 6 7 8 9 10 11 | tommd@HalfAndHalf /tmp% ghc -O2 t.hs && time ./t >/dev/null [1 of 1] Compiling Main ( t.hs, t.o ) Linking t ... ./t > /dev/null 0.03s user 0.00s system 87% cpu 0.040 total tommd@HalfAndHalf /tmp% cat t.hs main :: IO () main = do let l = [1..200] :: [Int] let pythagoras = [ x | x <- l, y <- l, z <- l, x^2 == y^2 + z^2] print pythagoras |