编辑:很难描述我想要做什么,但这里有一个尝试(来自评论):
我正在构建一个 wordfeud 求解器,所以我有一个单词和一些字母(都是字符列表)。我将此(如何在 Haskell 中查找字符串中字符的频率?)应用于两个列表以获取所有字母的频率。我现在正在做的是遍历“单词”字符列表,并检查所有字符是否在“字母”字符列表中充分出现。
我编写了一个 Haskell 函数,它通过将函数应用于两个列表的项目并比较结果来比较两个列表。
比较是这样进行的:
hasLetters' :: [Char] -> [Char] -> Bool
hasLetters' word letters = (getCharOccurrence (head word) (getCharOccurrences word)) <= (getCharOccurrence (head word) (getCharOccurrences letters))
这仅比较单词第一个字母的出现次数。但是应该比较所有单词(并且所有单词的结果都应该是 TRUE)。
我真的不知道如何做到这一点。我找到了让我定义谓词的“全部”方法,这非常好。它看起来像这样:
all (<= (getCharOccurrence (head word) (getCharOccurrences letters)))
(我认为这是正确的)它确保进入列表的每个项目都小于或等于提供的函数的结果。
但是:'all' 方法需要另一个参数。这将是定义应该与谓词进行比较的“源”参数。当这只是一个列表时,这很容易,然后我会做这样的事情:
all (<= (getCharOccurrence (head word) (getCharOccurrences letters))) [0..10]
但问题是:我没有这样的结果列表,我需要将其与以下结果进行比较:
(getCharOccurrence (head word) (getCharOccurrences letters))
我想我可以使用“map”函数将此函数应用于“word”字符列表中的每个字符,但我不知道如何使用它。我是这样开始的:
map (getCharOccurrence (head word) (getCharOccurrences word)) word
但这是错误的。
所以我(认为我)需要的是:将上述函数应用于“单词”字符列表的所有字符,并将其与谓词进行比较。
但也许我只是想错了。我是一个绝对的 Haskell/函数式编程新手。请帮帮我:-)