On Thu, Sep 30, 2004 at 11:26:15AM +0100, Malcolm Wallace wrote: > Just out of interest, I ran all of these suggested variations of > the word count solution in Haskell head-to-head against each other. > Here are the results, in seconds, on my machine (2.4GHz x86/Linux) > for the suggested input (N=500) from the shootout site. All Haskell > versions were compiled with ghc-5.04.2 -O2. > > original space-leaky 2.257 > Greg Buchholz 1.619 * > Sam Mason 0.594 > Malcolm Wallace 0.457 > Georg Martius 0.322 * > Tomasz Zielonka 0.047 > linux 'wc' 0.085 > > Those marked with a * gave the wrong number of words. The really > interesting thing is that Tomasz's solution is twice as fast as the > standard Gnu implementation!
I took Georg's, fixed the word count logic and added prettier printing, and then combined it with Sam's main (which I find more elegant, but others may find less straightforward). I think it strikes a good balance between efficiency and elegance. Cheers, Kevin. ------ import IO main = getContents >>= putStrLn . showC . foldl wc' (C 0 0 0 False) data C = C !Int !Int !Int !Bool deriving Show -- Line Word Char InWord showC (C l w c _) = show l ++ " " ++ show w ++ " " ++ show c wc' :: C -> Char -> C wc' (C l w c _) '\n' = C (l+1) w (c+1) False wc' (C l w c _) ' ' = C l w (c+1) False wc' (C l w c _) '\t' = C l w (c+1) False wc' (C l w c False) _ = C l (w+1) (c+1) True wc' (C l w c True) _ = C l w (c+1) True _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe