哈斯克尔。变量不在范围内: howManyTimes :: 整数 -> [整数] -> t



我写了一个小代码,它计算列表中的字符或数字以及次数。 例如如何多次 3 [2, 3, 4, 5, 3, 3, 1, 80, 3] 应该是 4

这是我的代码

howManyTimes y [] = 0
howManyTimes y xs = howManyIntern y (x:xs) acc 
                        | x == y = howManyIntern y xs (acc + 1)
                        | otherwise = howManyIntern y xs acc  

我收到此错误消息。不在范围内的变量: howManyTimes :: 整数 -> [整数] -> t

谁能给我一个提示?

我已经重写了我的代码。我不再收到错误,但输出为 0

howManyTimes y xs = howManyIntern y xs 0 
    where howManyIntern y [] acc = 0 
          howManyIntern y (x:xs) acc | x == y = howManyIntern y xs (acc + 1) 
                                     | otherwise = howManyIntern y xs acc 

表达式以来,注释中上述代码的输出为 0:

howManyIntern y [] acc = 0 

每当它完成计数时返回 0。通过返回acc很容易修复:

howManyIntern y [] acc = acc

另一种使用现有函数的方法:

howManyTimes y xs = length $ filter (==y) xs

最新更新