将一个列表映射到另一个列表(在Haskell中,+抽象解决方案) - 'map reduce'?

Phi*_*hil 2 haskell function

假设我们有一个坐标列表,如:
(1,2)
(0,3)
(4,1)
(0,3)
( - 2,3)
(6,5)

我们想得到以下列表,它被定义为每个连续坐标的总和.(抱歉的坏定义)如下:
(1,5)
(4,4)
(4,4)
( - 2,6)
(4,8)

因此存在集合A =(a,b,c,...,n),其中a,b,c,...,n是R ^ 2中的坐标.
存在函数f使得f(A)= B =(a + b,b + c,c + d,...,n-1 + n).

你会如何在像Haskell这样的函数式语言中编写类似的东西?将f应用于给定A以给出B的程序.

sep*_*p2k 6

您可以使用zip它的尾部压缩列表,您可以获得成对的对[((1,2), (0,3)), ((0,3),(4,1)), ...].然后你可以使用map它的总和替换每对对.或者你可以使用zipWith哪个基本上是zip+ map在一个函数中,除了给出的函数zipWith有类型a -> b -> c,而不是(a,b) -> c:

summedCoords = zipWith (\ (a,b) (c,d) -> (a+c, b+d)) coords (tail coords)
Run Code Online (Sandbox Code Playgroud)