def permute(l: List[Int]): List[List[Int]] = l match { case List(a) => List(List(a)) case _ => l flatMap ((x: Int) => permute( l filter (e => e != x)) map ( pl => x :: pl )) } permute(List.range(1,6)).foreach(println)