Tüm sonuçları hevesli bir şekilde almak ve tüm sonuçlar bulunduğunda bir Aktarım'dan Aktarım'a dönüştürmek yerine tembel bir Akışı döndürmek için bu Scala işlevini dönüştürmeyi denedim. Sorunun ((< - 1 - 9; z < - çözümü (xs.update (pos, i), pos)) verim z) toStream için geçerli olduğunu hissediyor. Bir for-döngü Seq çıkışını Stream çıkışına nasıl yeniden yazılır?
Herhangi bir tavsiye
takdir edilmektedir. Baktığım başka bir çözüm, bulunduğunda bir sonuç döndürmektir. Bu çözüm ile muhtemelen sadece 1 sonuç döndü. TeşekkürlerisConflictAt(xs.updated(pos, 0), pos, xs(pos)
bir kısıtlama denetim işlevidir.
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
}