[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