-- $Id: wordfreq.ghc,v 1.2 2001/02/27 04:04:35 doug Exp $
-- http://www.bagley.org/~doug/shootout/
-- from Julian Assange
-- compile with:
-- ghc -O -package data wordfreq.hs -o wordfreq
module Main where
import List(sortBy)
import Char(toLower,isLower)
import FiniteMap(fmToList,emptyFM,addToFM_C)
main = interact $ unlines . pretty . sort . fmToList . makemap . cwords . lower
where
pretty l = [pad 7 (show n) ++ "\t" ++ w | (w,n) <- l]
where
pad n s = replicate (n - length s) ' ' ++ s
sort = sortBy (\(w0,n0) (w1,n1) -> case compare n1 n0 of
EQ -> compare w1 w0
x -> x)
makemap = addFM emptyFM
where addFM fm [] = fm
addFM fm (x:xs) = addFM (addToFM_C (+) fm x 1) xs
cwords s = case dropWhile (not . isLower) s of
"" -> []
s' -> w : (cwords s'')
where (w, s'') = span isLower s'
lower = map toLower