[Haskell-cafe] Time consumption nub

Mirko Rahn rahn at ira.uka.de
Wed Jul 18 08:54:52 EDT 2007


Arie Groeneveld wrote:

> Ok, so when do I use nub instead of 'map head.group.sort'?

Never. If |nub_sort=map head.group.sort| is applicable, then you are 
dealing with a member of class Ord, so use the O(n*log n) |nub_sort|. If 
you want to preserve the relative order of the input list, use something 
like

nub_cache :: Ord a => [a] -> [a]
nub_cache = onub Set.empty
     where onub seen (x:xs)
	      | Set.member x seen =     onub               seen  xs
	      | otherwise         = x : onub (Set.insert x seen) xs
	  onub _ _ = []

|nub_cache| also works for infinite lists, btw.

/BR

-- 
-- Mirko Rahn -- Tel +49-721 608 7504 --
--- http://liinwww.ira.uka.de/~rahn/ ---


More information about the Haskell-Cafe mailing list