Я попытался преобразовать эту функцию Scala, чтобы вернуть ленивый поток вместо того, чтобы с нетерпением получить все результаты и преобразовать их из Seq в Stream, когда все результаты присутствуют. Я чувствую, что проблема заключается в (для (i < - от 1 до 9; z < - solve (xs.updated (pos, i), pos)) yield z) toStream.Как переписать вывод Seq для цикла в выход потока?
Любые советы приветствуются. Другое решение, на которое я смотрю, - это вернуть результат, когда он будет найден. С этим решением у меня, вероятно, есть только 1 результат. Спасибо
isConflictAt(xs.updated(pos, 0), pos, xs(pos)
является функцией проверки ограничений.
def solve(xs : List[Int], pos: Int): Stream[List[Int]] = {
if (!isConflictAt(xs.updated(pos, 0), pos, xs(pos))) {
val pos = xs.indexOf(0)
if (pos < 0) {println(xs); Stream(xs) } else (for (i <- 1 to 9; z <- solve(xs.updated(pos, i), pos)) yield z) toStream
} else Stream.empty
}