【发布时间】:2016-11-22 12:42:12
【问题描述】:
我有这样的元组列表:
[(0.0,0.0),(1.0,0.0),(2.0,0.0),(3.0,0.0),(3.0,0.0),(3.0,0.0),(4.0,0.0),(4.0,0.0)]
第一个元素是 X 坐标,第二个元素是 Y 坐标,我现在想编写将返回的函数:
[(0.0,0.0),(1.0,0.0),(2.0,0.0),(3.0,0.0),(3.0,1.0),(3.0,2.0),(4.0,0.0),(4.0,1.0)]
它从第一个元组中获取第一个元素,从第二个元组中获取第一个元素,如果它们不相等,则 Y 不变,但如果它们相等,我们将向 Y 添加一个。
如果有人知道如何用 Haskell 编写代码?
【问题讨论】:
-
听起来您可能会受益于
groupBy和Data.List中的 co 等功能。看看那个模块,看看有没有什么能让你知道如何解决这个问题。 -
我在考虑 lambda 和 map 但我不知道如何将它与检查列表中的元组结合起来
-
尝试编写处理算法各个部分的小函数。例如,编写一个函数,当且仅当第一个元素相同时,它接受两个元组并增加第二个元素。
-
那么这个结果是什么?结果的类型是什么?从你的描述看有点不清楚。你知道如何对元组进行模式匹配吗?
-
你确定不想把 [0, 1, 2, 3, 3, 3, 4, 4] 变成 [(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1)]?在对它们进行任何算术运算之后,双精度数对于相等性检查并不是那么好,而且您似乎不需要初始 y。如果我是对的,你想要
group、concatMap、zip和[0..]。您可以在 hoogle/hayoo 上找到前三个,您可以在 google 上找到。
标签: haskell