Меня вдохновил этот пост под названием " Только интересные языки интересны", чтобы посмотреть на предлагаемую им проблему (суммируя пару миллион чисел от вектора) в 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
, я скажу, что для запуска на 3 миллиона номеров потребовалось около 0,22, а для 30 миллионов номеров - 2,69 с.
По сравнению с результатами авторов блога 0.02s и 0.18s в Lush это намного хуже, что заставляет меня думать, что это можно сделать лучше.
Примечание. Для выполнения вышеуказанного кода требуется пакет TimeIt. cabal install timeit
получит его для вас.