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
}