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

时间:2018-12-21 19:20:28

标签: haskell

我写了一个小代码,该代码计算列表中的字符或数字以及次数。例如howManyTimes 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

有人可以给我一个提示吗?

1 个答案:

答案 0 :(得分:1)

  

我已经重写了我的代码。我不再收到错误,但输出为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