Hello

What do you think of this?  There is perhaps a recursive call that should be
made tail recursive but it seems to work.

The 'group' function takes the list of pairs as input and outputs a list of
maps from key to sums.

The nth element of the list of maps corresponds to the grouping applied for
the elements 0....n of the input list of pairs. Thus, that also works on
infinite list.

Unless I am missing sth...


import Data.Map (Map)
import qualified Data.Map as Map

group :: [(Int,Int)]  -> Map Int Int ->  [Map Int Int]
group [] amap  = []
group ((k, v):t) amap  = newmap : group t newmap
                                  where
                                 newmap = (Map.insertWith (+) k v amap)

l = [(1,1), (2,10), (1,2), (2,11), (1,3), (2,12)]

r = group l Map.empty

rr = take 2 r

li = concat [ [(1,i), (2, 10*i)] | i <- [0..] ]
ri = group li Map.empty

rri = take 20 ri


Regards

J-C



> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to