处理列表推导时键入不匹配

时间:2014-06-11 16:38:58

标签: list scala list-comprehension

def combinations(list: List[(Char,Int)]): List[List[(Char,Int)]] = {
  list match {
   case List() => List()
   case x::xs => for(o <- List.range(0,x._2 + 1)) yield  List((x._1,o)) :: combinations(xs)
  }
}

此功能无法正确编译,因为理解会将我的结果转换为导致

的列表
List(List(List((Char,Int))))

该功能旨在查找List(Char,Int)的所有子列表,并考虑('a',2)('a',5)

的子列表

我的问题是,我可以以某种方式停止理解,使最终结果成为一个列表吗?我错过了理解的全部内容吗?这个功能在逻辑上是否正确?

1 个答案:

答案 0 :(得分:2)

for comprehension有一个List类型的生成器,因此它产生List。您将yield ed List放入另一个列表中。

编译后

def combinations(list: List[(Char, Int)]) : List[List[(Char, Int)]]= {
val t = List.range(0, 1)
list match {
  case List() => List()
  case (c,i) :: xs => val res = for {
    o <- List.range(0, i + 1)
  } yield (c, o)
  res:: combinations(xs)

 }
}