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)
我的问题是,我可以以某种方式停止理解,使最终结果成为一个列表吗?我错过了理解的全部内容吗?这个功能在逻辑上是否正确?
答案 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)
}
}