Все комбинации элементов списка, при этом каждый элемент сохраняет позицию - PullRequest
0 голосов
/ 08 мая 2018

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

Например, если у меня есть список Список (1, 1) , я бы хотел получить что-то вроде этого:

List(1,1)

List(1,*)

List(*,1)

List(*,*)

где * обозначает элементы, которые не участвуют в текущей комбинации.

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

1 Ответ

0 голосов
/ 08 мая 2018

с определением

def f(xs: List[Char]): List[List[Char]] = xs match {
  case Nil => List(Nil)
  case h :: t => for (y <- List(h, '*'); ys <- f(t)) yield y :: ys
}

Это здесь:

f("1123".toList) foreach println

дает:

List(1, 1, 2, 3)
List(1, 1, 2, *)
List(1, 1, *, 3)
List(1, 1, *, *)
List(1, *, 2, 3)
List(1, *, 2, *)
List(1, *, *, 3)
List(1, *, *, *)
List(*, 1, 2, 3)
List(*, 1, 2, *)
List(*, 1, *, 3)
List(*, 1, *, *)
List(*, *, 2, 3)
List(*, *, 2, *)
List(*, *, *, 3)
List(*, *, *, *)
...