我正在尝试填充元组列表,但只有一个元素被添加到列表中。我有两个功能。 def f
生成要添加到元组列表中的元组(并且因为我测试了它而工作正常),以及应该填充列表的def iterator
。
def mainFn(): List[(Int, Int, Set[Int])] = {
def myList = List[(Int, Int, Set[Int])]()
//t: tuple (r,c)
def f(t:(Int,Int)): List[(Int, Int, Set[Int])] = {
//if element is 0 add hypothesis otherwise move to next element
if (sudoku.grid(t._1)(t._2) == 0){
(t._1,t._2,hypothesis(t._1,t._2))::Nil
}
else Nil
}
def iterator(t:(Int,Int),li : List[(Int, Int, Set[Int])]): List[(Int, Int, Set[Int])] = {
if (t==(0,0)) li ++ f(t)
else if (t._2 < 9) li ++ f((t._1,t._2+1))//shifting to the element on the right
else li ++ f((t._1+1, 0))//shifting to the next row
}
iterator((0,0),myList)
}
我有一个List[List[Int]]
形式的Sudoku网格,我想访问网格的每个单元格,如果元素为0,则生成(Int, Int, Set[Int])
形式的元组,否则移动到下一个单元格。但是我不能使用任何循环结构,只允许递归调用。我无法弄清楚如何递归调用迭代器,以便它一直循环通过数独网格。
答案 0 :(得分:0)
我最终使用了一种不同的方法(尽管仍然非常相似):
def allHypothesis(): List[(Int, Int, Set[Int])] = {
def myList = List[(Int, Int, Set[Int])]()
def f(t:(Int,Int), li: List[(Int, Int, Set[Int])]) : List[(Int, Int, Set[Int])] ={
val (row, column) = t;
if (row == 8 && column == 9) li
else if (column == 9) f((row+1,0),li)
else if (sudoku.grid(row)(column)==0) f((row,column+1), li:+(row,column,hypothesis(row, column)))
else f((row,column+1),li)
}
f((0,0),myList)
}