【发布时间】:2015-05-08 16:15:18
【问题描述】:
我正在尝试编写一个程序来读取文本文件,然后显示文件中单词的频率和计数。接下来我需要做的是从文本文件中过滤某些单词。我一直在寻找在线资源几个小时,但仍然找不到我要找的东西!
到目前为止,我已经为该程序提供了我的代码:
lowercase = map toLower
top doc = wordPairs
where
listOfWords = words (lowercase doc)
wordGroups = group (sort listOfWords)
wordPairs = reverse
$ sort
$ map (\x -> (length x, head x))
$ filterWords
wordGroups
filterWords :: String -> String
filterWords = filter (all (`elem` ["poultry outwits ants"])) . words
【问题讨论】:
-
您是否要过滤掉
"poultry"、"outwits"、"ants"这些词?函数 ```elem["poultry outwits ants"]``` 只会过滤掉匹配精确值"poultry outwits ants"的字符串,而不是任何字符串"poultry"、"outwits"或"ants"。 -
另外,不要在 Haskell 中使用制表符。这是可能的,但你更有可能遇到奇怪的语法错误。只需使用空格,它们总是有效的。
-
@bheklilr 是的,这正是我想要做的。我已将过滤器代码更改为 'filterWords :: String -> [String] filterWords = filter (
elem["poultry", "outwits", "ants"] .words' 但它仍然给我同样的错误 "parse错误(可能是不正确的缩进或不匹配的括号)”我不知道如何解决这个问题。谢谢 -
先将制表符更改为空格,这有帮助吗?之后你只会有类型错误(我认为)
-
缩进。您最初发布的代码中有制表符。每当您按下键盘上的 Tab 键时,您应该能够配置您的编辑器以插入一定数量的空格(我喜欢 4 个)。如果你不能让你的编辑器做到这一点,停止使用 notepad.exe 并获得一个真正的编辑器:P