6
我試圖轉換這個Scala函數來返回一個懶惰的流,而不是熱切地檢索所有的結果,並將它們從一個序列轉換爲流,當所有的結果存在。我感覺問題在於(對於(i <-1至9; z <-soll(xs.updated(pos,i),pos))yield z)toStream。如何將一個for-loop 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
}