为什么我的haskell代码比swift和c慢

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秒

enter image description here


我测量了在0.03 seconds中运行的haskell代码,这让我相信您已经在解释器(用于开发,而不是执行)中运行了这个代码,而不是编译代码。另外,您可能会让类型默认为integer,而不是使用machine Int值。

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