【发布时间】:2015-11-20 22:32:31
【问题描述】:
我正在使用Control.Foldl 库来遍历任意长的列表并计算任意多个唯一实体的所有出现次数。即,列表可能是形式
[Just "a", Just "b", Just "aab", Nothing, Just "aab"]
我的结果应该是这样的:
[(Just "a",1),(Just "b",1) (Just "aab", 2), (Nothing, 1)]
现在的问题是我没有这些实体的先验名称,我想在折叠时动态更新结果。
我的问题是我不知道如何用来自Control.foldl 的Fold 数据类型来描述这个计算。具体来说,在折叠的每一步,我都需要遍历结果列表并询问我是否看到了当前项目,但我看不出使用foldl 来描述这一点。
请注意,为了将来的使用目的,我在此处使用 Control.Foldl 库真的很重要,而不是折叠其他一些可折叠的数据类型,例如地图。在某种意义上,我的问题更多是关于如何使用 Foldl 库,因为文档对我来说不太清楚。
编辑:我展示的示例只是一个玩具示例,实际上我需要遍历一个任意大列表多次计算统计信息,因此我使用 foldl 库,它允许我使用应用程序组合计算,即 @ 987654327@ 和 foldl 允许我只遍历列表一次,计算所有 m 统计信息。请使用 foldl 库找到解决方案。
【问题讨论】:
-
我展示的示例只是一个玩具示例,实际上我需要遍历一个任意大列表多次计算统计信息,因此我使用的是 foldl 库,它允许我使用组合计算applicatives ie
toResults <$> stat1 <*> stat2 <*> ... <*> statm $ largeList和 foldl 允许我只遍历列表一次,计算所有 m 统计信息。 -
一件事不排斥另一件事。您可以将“直方图”设为
Map (Maybe String) Int(或任何合适的),但仍使用Fold来构建它。
标签: haskell