On Mon, 17 Jan 2005 10:48:18 -0600, jekwtw <[EMAIL PROTECTED]> wrote: > > I'm putting together a script to gather run-time stats for some functions > I'm working with, and I'm having a terrible time. My strategy is to > evaluate a function a number of times and compute the difference between the > elapsed CPU time before and after the repeated calls. > > > timeNReps :: (a -> b) -> a -> Int -> FilePath -> IO () > > timeNReps func arg reps fileName = > > do t0 <- System.CPUTime.getCPUTime > > runNReps func arg reps > > t1 <- System.CPUTime.getCPUTime > > appendFile fileName ((showMS (t1 - t0)) ++ "\n") > > where > > showMS n = show (n `quot` 1000000000) > > showMS just converts the pico-second result into milli-seconds and > stringifies it. > > runNReps is an IO program (do sequence) that is intended to call the > function and tail-call itself a given number of times: > > > runNReps :: (Int -> a) -> Int -> Int -> IO () > > runNReps f x todo > > | todo > 0 = do let junk = (f x) > > runNReps f x (todo - 1) > > | otherwise = return (())
Haskell is a non-strict language which means that 'junk' wont be evaluated since it's not necessary for the function to terminate. Check 'replicateM_' from Control.Monad. > runNReps :: Int -> IO a -> IO () > runNReps = replicateM_ -- Friendly, Lemmih _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users