이 질문은 다음과 같은 질문에 관련 : How to force evaluation in 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은 deepseq가 목록에서 호출 될 때만 평가되며 이는 결함있는 벤치 마크를 제공한다고 생각합니다. 나 맞아 ?
타이밍 벤치 마크의 경우 기준 라이브러리를 살펴보십시오. 특히'nf'를 사용하게 될 것입니다. 파일을 열어서'quicksort' 호출 자체를'nf'로 묶어야합니다. – Alec