Выполнение эффективных чисел в 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 и выполнение времени говорят мне, что для выполнения 3 миллионов номеров потребовалось около 0,22 секунды, а для 30 миллионов номеров - 2,69 секунды.

По сравнению с результатами авторов блогов 0,02 с и 0,18 с в Lush, это намного хуже, что заставляет меня думать, что это можно сделать лучше.

Примечание. Для выполнения приведенного выше кода требуется пакет TimeIt. Время установки Кабала - он получит это за вас.

11
задан Fredrik 1 December 2011 в 10:14
поделиться