我找到了一个从 Scala 中的列表列表中创建笛卡尔积的函数。但是,它不是尾递归的,并且不适用于大型列表。不幸的是,在设计时我不知道需要组合多少个列表,所以我认为递归函数是必要的。我正在努力使其尾递归,以便编译器对其进行优化:
def product[T](listOfLists: List[List[T]]): List[List[T]] = listOfLists match {
case Nil => List(List())
case xs :: xss => for (y <- xs; ys <- product(xss)) yield y :: ys
}