Вместо этого я бы использовал неизменный список, это был бы аккумулятор. Это было бы более функционально. Функция не будет иметь побочных эффектов и будет возвращать результирующее List
:
def tryToClaimPosition(player: Int, horizontal: Int , vertical: Int , list: List[(Int, Int)]): List[(Int, Int)] = {
if (vertical == gridsize - 1) {
list.reverse
}
if (horizontal < gridsize - 1) {
if (gameBoard(horizontal)(vertical) == player) {
val tuple = (horizontal, vertical)
tryToClaimPosition(player,horizontal + 1, vertical, tuple::list)
else {
tryToClaimPosition(player,horizontal + 1, vertical, list)
}
} else Nil
}
Обратите внимание, что я добавил кортеж к списку, потому что это занимает постоянное время (добавление пропорционально размеру List
). Вот почему я возвращаю list.reverse
, чтобы сохранить первоначальный порядок.
Также я спросил о случае, когда horizontal > gridsize - 1
. Ваша программа ничего не делает, поэтому я предполагаю, что ничего не должно быть возвращено, следовательно, Nil
в предложении else
. Это необходимо, чтобы функция всегда возвращала значение.