
On Wed, Jul 23, 2008 at 6:10 PM, Corey O'Connor
My straightforward Haskell solution was: ------------------------------------------------------------------- import Text.Regex.Posix
main = do f_lines <- readFile "test.out" >>= return . lines let duration = foldl add_line 0.0 f_lines add_line sum line = let [[_,m]] = line =~ "([0-9.]+)" framerate = read m delta = 1.0 / framerate in sum + delta putStrLn $ "Duration (sec): " ++ show duration -------------------------------------------------------------------
I'm sure the other suggestions have improved performance far more than this suggestion will, but it's still worth a shot. I don't think I've _ever_ seen a case where using foldl was a good idea. foldl interacts poorly with laziness; use foldr when the function you are folding is nonstrict, and use foldl' (from Data.List), a strict version of foldl, when the function you are folding is strict. This is, of course, only a rule of thumb. Changing that foldl to foldl' will probably speed this up a decent amount. Luke