Код для перечисления перестановок в Scala

Я закодировал функцию для перечисления все перестановки данного списка. Что вы думаете о приведенном ниже коде?

def interleave(x:Int, l:List[Int]):List[List[Int]] = {
  l match { 
    case Nil => List(List(x))
    case (head::tail) =>
      (x :: head :: tail) :: interleave(x, tail).map(head :: _)
  }
}

def permutations(l:List[Int]):List[List[Int]] = {
  l match {
    case Nil => List(List())
    case (head::tail) =>
      for(p0 <- permutations(tail); p1 <- interleave(head, p0)) yield p1
  }
}
17
задан Michael 14 November 2011 в 16:10
поделиться