
On Thu, 02 Nov 2006 12:20:55 -0800, you wrote:
It seems you only need a table of counts of the number of times the string has occurred previously, which you can have available on the first pass.
e.g, import Data.List import Data.Map as Map mark strings = snd $ mapAccumL (\counts str -> (Map.insertWith (+) str 1 counts, str++maybe "" (\n -> ':':show n) (Map.lookup str counts))) Map.empty strings
this works on your example, and also handles
["Alice", "Bob", "Cindy", "Bob", "Bob", "Dave", "Cindy"] ++ repeat "Tim" giving
["Alice","Bob","Cindy","Bob:1","Bob:2","Dave","Cindy:1","Tim","Tim:1","Tim:2",...]
No, you missed a part of the second rule: If there are multiple occurrences of a string, the _first_ occurrence has to be tagged, too, not just the second through n'th occurrences. The result of the above would have to be: ["Alice","Bob:1","Cindy:1","Bob:2","Bob:3","Dave","Cindy:2","Tim:1","Tim:2","Tim:3",...] Steve Schafer Fenestra Technologies Corp. http://www.fenestra.com/