У меня есть метод, который делает перестановки:Scala перестановками через flatMap из подмножества
def permutations[T](lst: List[T]): List[List[T]] = lst match {
case Nil => List(Nil)
case x :: xs => permutations(xs) flatMap { perm =>
(0 to xs.length) map { num =>
(perm take num) ++ List(x) ++ (perm drop num)
}
}
}
Во-первых, принять рекурсивный вызов с парой - голова, хвост для списка («а», «б», «в "): c - Nil b - c a - bc
и переставить до и после деталей. В результате у меня есть все перестановки с трех позже. Мой вопрос следующий: почему рекурсивный вызов не возвращает промежуточный оператор типа «bc», «cb», «c» и возвращает допустимый набор из трех позже.
Я предполагаю, что вы хотите реализовать ваш собственный, но в случае, если вы не знали, что 'Seq' имеет метод' permutations' ('List' реализует' Seq'). – Simon
Я знаю о методе перестановки в Seq, это просто эксперимент с комбинаторикой. – pacman