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

标签 function haskell

假设我们有一个坐标列表,例如:
(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 的程序。

最佳答案

您可以使用 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)

关于function - 将一个列表映射到另一个列表(在 Haskell 中,+抽象解决方案) - 'map reduce' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186931/

相关文章:

php - 如何定义这种php函数?

haskell - 在 Reader resp 的情况下 Monad vs Applicative。 ((->)一)

linux - Haskell System.Process 处理

c++ - 简单的功能大小;了解指针与指针的区别

javascript - 如何使用特定键 Deep 键将所有值从 JSON 对象放入数组

c++ - 从函数返回对象时是否创建了临时对象?

javascript - 我可以使用 Function.bind 保留默认值吗?如果没有,为什么?

haskell - 了解Haskell的堆栈程序以及解析器和LTS版本

列表到元组计数值重复和元组内的列表 - Haskell

haskell - `Show` GHC 核心实例