[Haskell-cafe] OCaml list sees abysmal Language Shootout results

Kevin Everets flynn at clarkhall.ca
Thu Sep 30 09:49:46 EDT 2004


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


More information about the Haskell-Cafe mailing list