Ho provato a convertire questa funzione di Scala per restituire un flusso lento invece di recuperare tutti i risultati e convertirli da un Seq in Stream quando tutti i risultati sono presenti. Ho sentito il problema si trova in (per (i < - 1 a 9; z < - risolvere (xs.updated (pos, i), pos)) resa z) toStream.Come riscrivere un output Seq del ciclo in uscita Stream?
Qualsiasi consiglio è apprezzato. Un'altra soluzione che sto osservando è di restituire un risultato quando viene trovato. Con questa soluzione probabilmente ho restituito solo 1 risultato. Grazie
isConflictAt(xs.updated(pos, 0), pos, xs(pos)
è una funzione di controllo dei vincoli.
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
}