Все перестановки с повторением с использованием scala

Я ищу scala способ дать все перестановки без повторений. Я знаю, что на этом сайте уже есть некоторые публикации, но у них, похоже, немного другая проблема.

Я ищу все перестановки с повторениями. Например:

combine(List('A','C','G'))

Должен дать:

List(List('A'.'A','A'),List('A'.'A','C'),List('A'.'A','G'),List('A'.'C','A'),
List('A'.'C',''C), ... List('G'.'G','G')

Прошу прощения, если моя проблема уже решена, но я не смог ее найти.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Мой собственный подход (не компилируется):

def combine(size: Int = sym.length) : List[List[T]] = {
  size match {
    case 0 => List()
    case 1 => sym.toList.map(List(_))
    case _ => for (el <- sym) yield el :: combine(size-1)
  }
}

sym - член массива класса, который содержит все символы для объединения.

Ответы на вопрос(7)

Ваш ответ на вопрос