関数のコストを計算するコードを作成しようとしました
list <- buildlist 10000 10000
starttime <- getClockTime
let sortedlist = quicksort list
endtime <- getClockTime
let difftime = diffClockTimes endtime starttime
関数ビルドリスト:
buildlist :: Int -> Int -> IO [Int]
buildlist n m = do
seed <- getStdGen
let l = randomRs (0, m) seed
let list = take n l
return list
関数のクイックソート:
quicksort [] = []
quicksort (x:xs) =
let head = [a|a<-xs,a<=x]
tail = [a|a<-xs,a>x]
in quicksort head ++ [x] ++ quicksort tail
最初の質問: difftime を出力すると、リストの長さに関係なく常にゼロになります。
2 つ目: Real World Haskellのコードの ">>=" は何を意味するのだろうか。
getClockTime >>= (\(TOD sec _) -> return sec)
3 番目: TimeDiff変数からtdSecとtdPicosecを取得するためにこれを記述します。もっと簡単な方法はありますか?
time <-(\(TimeDiff _ _ _ _ _ s ps) -> return [ ( \a -> fromIntegral a :: Double ) s , ( \a -> fromIntegral a :: Double ) ps ] ) difftime