我有一个清单
(+)
我希望得到一个元组列表,它按元组列表的第一个元素分组。另外,我想要为所有分组元组应用一个函数,例如:总和。
应用group by和函数[(8,2),(3,3),(10,8)] :: [(Int,Int)]
后,我期待结果:
test :: Eq a => Tree a -> [(a,Int)]
test t = map (foldl1 sumZahlwerte) grouped
where grouped = groupBy (\c d -> fst c == fst d) (getTuple t)
sumZahlwerte :: Eq a => (a,Int) -> (a,Int) -> (a,Int)
sumZahlwerte (b,c) (_,e) = (b,c+e)
如何使用Haskell执行此操作?
修改
这不完全重复 How to group similar items in a list using Haskell?因为我还想知道如何将函数应用于分组元组列表中的每个第二个元素。
我尝试了以下内容,我认为它现在有效。
getTuple t
其中[(a,Int)]
返回export Declaration
列表。
感谢您的反馈。谢谢你的帮助!
答案 0 :(得分:0)
这似乎是一项家庭作业/学习任务,所以我只会给出一些提示:
groupBy
(来自Data.List
)on
模块提供的小函数Data.Function
- (==) `on` fst
将是一种惯用的写法这在haskell中,但是练习中写了一个lambda函数 - 就是“比较”[[(Int,Int)]]
类型的内容,并使用便捷的函数map
和foldr1
,然后您可以添加这些对 - 前提是您有一个函数add2 :: (Int,Int) -> (Int,Int) -> (Int,Int)
添加第二个组件