我被這篇名爲「Only fast languages are interesting」的帖子所啓發,看看他在Haskell中提出的問題(總結了幾百萬個來自矢量的數字),並與他的結果進行比較。在Haskell中做高效數字
我是一個Haskell新手,所以我真的不知道如何正確的時間或如何有效地做到這一點,我對這個問題的第一次嘗試是以下。請注意,我沒有在矢量中使用隨機數字,因爲我不知道如何以良好的方式進行操作。爲了確保全面評估,我還印刷了一些東西。
import System.TimeIt
import Data.Vector as V
vector :: IO (Vector Int)
vector = do
let vec = V.replicate 3000000 10
print $ V.length vec
return vec
sumit :: IO()
sumit = do
vec <- vector
print $ V.sum vec
time = timeIt sumit
加載這件事在GHCI和運行time
告訴我,花了約0.22s至3萬個號碼和2.69s 30萬個號碼中運行。
與Lush中0.02s和0.18s的博客作者結果相比,情況要糟得多,這讓我相信這可以以更好的方式完成。
注意:上面的代碼需要運行包TimeIt。 cabal install timeit
將爲您提供。
小心你測量的東西。目前,您正在測量矢量的分配並獲取總和。 –
不要使用ghci進行性能測試。使用ghc --make -O2。 –
'ique',查看使用'vector'軟件包的優秀教程:http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial – applicative