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(1, i + 1)
} yield List((c, o)) :: combinations(xs)
List()
}
}
如果我尝试返回res而不是List(),我有以下函数将无法编译。这是List(List(List[(Char,Int)]]]
的类型不匹配但是这段代码:
List(('a',10)) :: combinations(List())
按照预期完美编译。为什么函数内部不能编译?是不是完全一样?我怎么能解决这个问题?
答案 0 :(得分:0)
您的理解产生了List[List[(Char,Int)]]
类型的元素。
For-comprehensions将生成他们正在产生的元素的列表,因此在这种情况下将是List[List[List[(Char,Int)]]]
。
我不完全确定你想要达到的目标,但我认为它会是这样的:
def combinations(list: List[(Char, Int)]) : List[List[(Char,Int)]]= {
val t = List.range(0, 1)
list match {
case Nil => List()
case (c,i) :: xs =>
(for {
o <- List.range(1, i + 1)
} yield (c, o)) :: combinations(xs)
}
}
for-comprehension生成一个List[(Char, Int)]
,它添加在您的组合方法生成的列表的开头。