這個問題是涉及到以下問題: How to force evaluation in Haskell?懶惰如何影響Haskell的基準測試?
我想基準列表中的快速排序算法。爲此,我製作了一定數量的文件,其中包含隨機數字。
這裏是有問題的代碼的相關部分:
import System.IO
import Data.Time
import Control.DeepSeq
getListFromFiles :: IO [[Int]]
quicksort :: (Ord a) => [a] -> [a]
main = do
l <- getListFromFiles
start <- getCurrentTime
let l' = map quicksort l
end <- l' `deepseq` getCurrentTime
print (diffUTCTime end start)
我不想知道要測量的計劃需要尋找到這些文件,只是排序取一個時間。 由於懶惰,我認爲列表l僅在列表l'上調用deepseq時評估,並且提供了一個有缺陷的基準。我對麼 ?
對於定時基準,請查看基準庫。特別是,你可能會最終使用'nf'。確保你首先打開文件,然後用'nf'將自己的'quicksort'調用本身。 – Alec