Scala第一个程序问题

时间:2015-06-22 11:09:19

标签: scala recursion case frequency

我在使用其他语言的函数式编程经验之后才开始学习Scala。

def freq(c:Char, y:String, list:List[(Char,Int)]): List[(Char,Int)] = list match{
  case _ =>  freq(c, y.filter(_ == c), list :: List((count(c,y),c))) 
  case nil => list
} 

在上面的代码中,我尝试以递归方式连接列表时遇到错误。错误发生在list::List((count(c,y),c))中。 count方法接受一个char和一个字符串,并根据char出现的次数返回一个int。

非常感谢任何帮助。我得到的错误状态[(Char,Int)]必需(Char,Int)。

2 个答案:

答案 0 :(得分:2)

Cons运算符(::)是一个中缀运算符,所以如果你想获得List[T]而不是List[List[T]]的类型,那么你应该写

freq(c, y.filter(_ == c),(count(c,y),c)) :: list)

答案 1 :(得分:0)

此外,您需要切换2个匹配案例,因为nil永远不会以这种方式进行评估。 _也会抓到零,永远不会继续达到第二种情况。