在递归展平方法实现中获取类型错误

时间:2016-02-04 03:33:37

标签: scala recursion pattern-matching

我正在努力学习scala。今天我试图编写一个简单的递归方法来展平嵌套列表。我知道我可以调用一个扁平功能,但我试图从头开始。

我遇到类型不匹配错误,我试图了解原因。什么类型的变量是' A'。

def flatten[A](lst:List[List[A]):List[A] = lst match{

case Nil=> Nil
case (h:List[A])::tail=> flatten(h)::flatten(tail)
case h :: tail=> flatten(tail)
}

1 个答案:

答案 0 :(得分:2)

flatten(h)是一个编译错误,因为hList[A]flatten期待嵌套List[List[A]]。尝试简单地将h与展平tail

的结果联系起来
def flatten[A](lst: List[List[A]]): List[A] = lst match {
  case Nil => Nil
  case h :: tail => h ::: flatten(tail)
}

示例:

scala> flatten(List(List("a", "b"), List("c", "d")))
res0: List[String] = List(a, b, c, d)

scala> flatten(List(List(1, 2), List(3, 4)))
res1: List[Int] = List(1, 2, 3, 4)