【发布时间】:2020-11-18 18:36:17
【问题描述】:
我正在计算数量 文本中每个单词的出现次数 然后将其表示为元组列表。
我尝试过使用累加器 我已经尝试过使用 concat 和过滤。发生了什么 问题是我不确定如何处理列表中的列表。
我不确定如何从这里继续,我尝试在参数上使用过滤器 (x /=) 调用函数 wordCountt,但由于某种原因无法运行。非常感谢这里的一些指导。
干杯
type Document = [Sentence]
type WordTally = [(String, Int)]
wordCountt :: Document -> WordTally
wordCountt [] = []
wordCountt [(x:xs), ys] = [(x, length (filter (x ==) (concat [(x:xs), ys])))] ++ wordCountt [xs, ys]```
```wordCountt [["a", "rose", "is", "a", "rose"],["but", "so", "is", "a", "rose"]]
[("a",3),("rose",3),("is",2),("a",2),("rose",2)*** Exception: CompLing.hs:(60,1)-(61,100): Non-exhaustive patterns in function wordCountt```
【问题讨论】:
-
您可以使用
concat摆脱列表列表。但是,尽管如此,我认为您在 single 函数中执行所有操作会使问题变得更加复杂。分开你的顾虑。编写可以合并两个WordTallys 的辅助函数。您可能还想看看Map,它是一个字典类型。 -
这里还有一个问题是
[(x:xs), ys]模式。这意味着您只匹配长度为 two 的列表。因此,如果列表包含一个或三个或更多元素,则会引发错误。您应该使用(x:xs) : ys模式来匹配非空列表。