如何在 Haskell 中查找输入字符串中 char 的出现次数

Dia*_*ana -2 haskell functional-programming

我正在尝试编写一个函数,它将接受 aString和 aChar并输出字符串中出现字符的索引。

stringCount str ch = 
Input : "haskell is hard" `h`
Output:[0,11]
Input : "haskell is hard" `a`
Output:[1,12]
Run Code Online (Sandbox Code Playgroud)

请帮助我,我正在努力理解哈斯克尔。

Mic*_*ohl 5

有很多方法可以做到这一点,但既然你提到你是 Haskell 初学者,列表理解可能是最容易理解的(我假设这是家庭作业,所以你必须自己实现它,而不是使用elemIndices):

stringCount str ch = [ y | (x, y) <- zip str [0..], x == ch ]
stringCount "haskell is hard" 'a'
-- [1,12]
stringCount "haskell is hard" 'h'
-- [0,11]
Run Code Online (Sandbox Code Playgroud)

在这里,我们是具有从 0 开始的无限列表的zip字符串,生成元组等。然后,我们仅选择其中字符(绑定到)等于参数的元组,并返回每个元组的索引(绑定到)。str('h', 0), ('a', 1), ('s', 2)xchy

如果您想保留当前的参数顺序但使用elementIndices您可以使用以下命令:

stringCount' = flip elemIndices 
stringCount' "haskell is hard" 'h'
-- [0,11]
Run Code Online (Sandbox Code Playgroud)