My first approach would be to generate the list of sliding windows: [[4,3,2],[3,2,6],[2,6,7]]
after importing Data.List: > map (take 3) . tails $ [4,3,2,6,7] [[4,3,2],[3,2,6],[2,6,7],[6,7],[7],[]] Not quite what we want, but close: > filter ((== 3) . length) . map (take 3) . tails $ [4,3,2,6,7] [[4,3,2],[3,2,6],[2,6,7]] So (filter ((== 3) . length) . map (take 3) . tails) seems to be the desired function. Now just map average. However, we don't really need the sliding windows themselves, just the sliding sum. There might be a slightly more efficient way to do that, but I'll leave it as an exercise for you or somebody else. --Max On Thu, Aug 27, 2009 at 10:19 AM, <hask...@kudling.de> wrote: > Hi, > > Imagine you have a list with n-values. You are asked to iterate over the list > and calculate the average value of each 3 neighbouring values. > > 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? > The naive ansatz to use "(!!") excessively sounds pretty inefficient. > > Bye, > Lenny > _______________________________________________ > 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