Это продолжение моего предыдущего вопроса. Предположим, я хотел бы сделать Stream
из всех строк, соответствующих ^a+b+$
(одна или несколько "a", а затем одна или несколько "b").
Я кодирую это следующим образом:
def interleave(s1:Stream[String], s2:Stream[String]): Stream[String] =
if (s1.isEmpty) s2 else Stream.cons(s1.head, interleave(s2, s1.tail))
def generate(s1:Stream[String], s2:Stream[String]): Stream[String] =
if (s1.isEmpty) s1 else interleave(s2.map(s1.head + _), generate(s1.tail, s2))
def as:Stream[String] = Stream.cons("a", as.map(_ + "a"))
def bs:Stream[String] = Stream.cons("b", bs.map(_ + "b"))
def solve = generate(as, bs)
К сожалению solve
не удается с out of memory
. Однако он отлично работает для конечных потоков: например, solve(as take 10, bs take 10)
Как бы вы исправили код выше? Вы бы предпочли другой способ решения проблемы?