我在使用其他语言的函数式编程经验之后才开始学习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)。
答案 0 :(得分:2)
Cons运算符(::
)是一个中缀运算符,所以如果你想获得List[T]
而不是List[List[T]]
的类型,那么你应该写
freq(c, y.filter(_ == c),(count(c,y),c)) :: list)
答案 1 :(得分:0)
此外,您需要切换2个匹配案例,因为nil永远不会以这种方式进行评估。 _
也会抓到零,永远不会继续达到第二种情况。