[Haskell-cafe] More fun with micro-benchmarks and optimizations.
(GHC vs Perl)
Luke Palmer
lrpalmer at gmail.com
Wed Jul 23 18:33:20 EDT 2008
On Wed, Jul 23, 2008 at 6:10 PM, Corey O'Connor <coreyoconnor at gmail.com> wrote:
> 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
More information about the Haskell-Cafe
mailing list