这是一个非常简单的Haskell代码,用于查找满足毕达哥拉斯定理X ^ 2 = Y ^ 2 + Z ^ 2的所有毕达哥拉斯整数(从1到200)
Haskell:
let l = [1..200]
let pythagoras = [ x | x <- l, y <- l, z <- l, x^2 == y^2 + z^2]
完成它需要 24.1秒,
迅速: 使用标准的循环 0.05秒
C: 使用标准的循环 0.022秒
答案 0 :(得分:9)
我测量了0.03 seconds
中运行的Haskell代码,使我相信您已经在解释器中运行了该代码(用于开发,而不是执行性能),而不是编译代码。另外,您可能将类型默认为Integer而不是使用机器的Int
值。
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