2016-07-27 42 views
0

我编写了一个函数枚举给定列表的排列,但我不明白为什么它一贯返回一个空列表,而不是排列。 你能帮我理解吗?缺少的东西在循环评估(斯卡拉)

def permutations(l: List[Any]): List[List[Any]] = l match { 
    case Nil => Nil 
    case head :: tail => for { 
    element <- l 
    permutationOfRest <- permutations(l.filter(x => x != element)) 
    } yield element :: permutationOfRest 
} 

回答

2

问题出在第一个case。当输入列表为空时,您将返回一个空列表或排列。而不是它,你应该返回列表没有排列:

case Nil => List(Nil) 
+0

非常感谢。我经常对map和flatMap感到困惑 – ilmirons