ghci内で実行時間を知る

追記 2010/09/13

読んでなかった orz

2.8.1. GHCiオプション

GHCiオプションは、:setで有効化、 :unsetで無効化できる。

利用できるGHCiオプションは以下のものである。
(中略)

  1. s

一つ式を評価するごとに、経過時間や確保されたバイト数などの統計情報を表示する。注意: 確保されたバイト数はGC毎に計算されるので、これは記憶領域管理器の確保領域の大きさ程度の正確さしかない。そういうわけで、GCが起こらなかった場合、値として0が表示されるかもしれない。

追記 2010/09/13 ここまで


haskellで実行時間をしりたかった。

どうやって計測するかというとData.Time内のgetCurrentTimeで時間を得ておいてその後にdiffUTCTimeで差分を取る

import Data.Time

main = do
  x <- getCurrentTime
  -- 本体
  print $ length $ takeWhile (<200000) primes
  -- 本体ここまで
  y <- getCurrentTime
  print $ diffUTCTime y x


primes=2:filter isPrime [3,5..]
isPrime x=all ((/=0).(x`mod`)) $ takeWhile ((x>=).(^2)) primes

変数yがいまいちダサイのだが getCurrentTime がIOモナドなのでやむを得ない。

バインドで書き直してみると

import Data.Time

main = do
  startTime <- getCurrentTime
  -- 本体ここから
  print $ length $ takeWhile (<200000) primes
  -- 本体ここまで
  getCurrentTime >>= return.(`diffUTCTime` startTime) >>= print


primes=2:filter isPrime [3,5..]
isPrime x=all ((/=0).(x`mod`)) $ takeWhile ((x>=).(^2)) primes

どっちもどっちだな。