Ich habe versucht, diese Scala-Funktion zu konvertieren, um einen Lazy Stream zurückzugeben, anstatt alle Ergebnisse eifrig abzurufen und sie von einem Seq in Stream zu konvertieren, wenn alle Ergebnisse vorhanden sind. Ich habe das Gefühl, das Problem liegt in (für (i < - 1 bis 9; z < - lösen (xs.updated (pos, i), pos)) Ausbeute z) toStream.Wie schreibt man eine For-Loop-Seq-Ausgabe in die Stream-Ausgabe um?
Jeder Rat wird geschätzt. Eine andere Lösung, die ich betrachte, ist, ein Ergebnis zurückzugeben, wenn es gefunden wird. Mit dieser Lösung habe ich wahrscheinlich nur 1 Ergebnis zurückgegeben. Danke
isConflictAt(xs.updated(pos, 0), pos, xs(pos)
ist eine Bedingungsprüfung Funktion.
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
}