ベンチマークのための時間計測関数
30分プログラム、その541。ベンチマークのための時間計測関数を書いてみた。
http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_102にあるようにビルトインの関数とオレ関数の速度を比較しようと思ったけれど、そのための時間測定のほうが面倒くさいことに気がついた。
もちろんシェルでtime hogehogeとやれば簡単だけど、あえてHaskellの関数でやろうとがんばってみた。が、結局、好きなタイミングで評価させることができなくて、無駄なprintが入ってる。
ちなみにビルトインのほうが100倍ぐらい速かったです。
使い方
*Main> bench (\_ -> print $ length $ sort [1..1000]) 1000 0.003578s
ソースコード
import Data.List import Data.Time.Clock bench f = do from <- getCurrentTime _ <- f () to <- getCurrentTime return $ to `diffUTCTime` from mySort [] =[] mySort (x:xs) = mySort [y | y <- xs, y < x] ++ [x] ++ mySort [y | y <- xs, y > x] benchSort n = bench (\_ -> print $ length $ sort [1..n]) benchMySort n = bench (\_ -> print $ length $ mySort [1..n])