How about this one? Should be pretty efficient. let mavg n xs = let (sum -> seed,rest) = splitAt n xs in map (%n) . scanl (\a (p,n) -> a+n-p) seed $ xs `zip` rest
2009/8/27 Patai Gergely <[email protected]>: >> For example, starting from >> >> [4,3,2,6,7] >> >> you need to find the averages of >> >> 4,3,2 and 3,2,6 and 2,6,7 >> >> resulting in >> >> [3,4,5] >> >> What is the most elegant way to do that? > It's probably less elegant than tails, but very likely more efficient to > keep track of running sums instead of summing the sublists over and over > again. > > import Data.Ratio > > nsums n xs = map (% n) $ scanl (+) (sum (take n xs)) $ zipWith (-) (drop > n xs) xs > > Gergely > > -- > http://www.fastmail.fm - The professional email service > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > -- Eugene Kirpichov Web IR developer, market.yandex.ru _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
