私は怠惰なストリームを返す代わりに、熱心にすべての結果を取得し、すべての結果が存在する場合にストリームする配列からそれらを変換するために、このScalaの機能を変換しようとしています。 toStream;私は(解決(xs.updated(POS、I)、POS))降伏Z - - Z < 9から1(I <のために)問題がにある感じています。forループのSeq出力をStream出力に書き換えるにはどうすればよいですか?
アドバイスありがとうございます。私が見ている別の解決策は、見つかったときに結果を返すことです。このソリューションではおそらく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
}