с определением
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(*, *, *, *)