[Haskell-cafe] Mapping over multiple values of a list at once?

Eugene Kirpichov ekirpichov at gmail.com
Thu Aug 27 05:19:32 EDT 2009


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 <patai_gergely at fastmail.fm>:
>> 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
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



-- 
Eugene Kirpichov
Web IR developer, market.yandex.ru


More information about the Haskell-Cafe mailing list