我写了一个小代码,该代码计算列表中的字符或数字以及次数。例如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
有人可以给我一个提示吗?
答案 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