Если тип возвращаемого значения установлен на List[List[String]]
, в код необходимо внести следующие изменения:
- Поскольку к
someType._2
обращаются как someType._2(2)
, должно быть не менее3
строк в списке someType._2
. Последнее выражение должно иметь тип возвращаемого значения, т. Е., List[List[String]]
.Поскольку someType._2(1)
и someType._2(2)
являются просто строками, а не List[String]
: List(someTuple._2,List(someTuple._2(1),someTuple._2(2)))
будет иметь тип возврата List[List[String]]
Значение "Some Word
" будетизменяя в рекурсивном процессе, должным образом отмечая, что someTuple._2.size
всегда >=3
.
Поскольку нам нужен доступ к someType._2
, и он будет изменяться во время каждой рекурсии, он объявляетсякак var
внутри рекурсивной функции.
С учетом этого понимания, исходя из ваших требований, вам может понадобиться следующий код:
def someRecursiveFunction(listOfWords:List[String],sw: String):List[List[String]] = {
val textSplitter = listOfWords.lastIndexOf(sw)
var i =0
if(i==0) { var someTuple:(List[String],List[String]) = (List(),List()) }
if (textSplitter != -1 && listOfWords.size-3>=textSplitter) {
someTuple = listOfWords.splitAt(textSplitter)
println(someTuple._1,someTuple._2) // for checking recursion
if( someTuple._1.size>=3){ i+=1
someRecursiveFunction(someTuple._1,someTuple._1(textSplitter-3))}
}
List(someTuple._2,List(someTuple._2(1),someTuple._2(2))) // What I want back
}
В Scala REPL:
val list = List("a","b","c","x","y","z","k","j","g","Some Word","d","e","f","u","m","p")
scala> val list = List("a","b","c","x","y","z","k","j","g","Some Word","d","e","f","u","m","p")
list: List[String] = List(a, b, c, x, y, z, k, j, g, Some Word, d, e, f, u, m, p)
scala> someRecursiveFunction(list,"d")
(List(a, b, c, x, y, z, k, j, g, Some Word),List(d, e, f, u, m, p))
(List(a, b, c, x, y, z, k),List(j, g, Some Word))
(List(a, b, c, x),List(y, z, k))
(List(a),List(b, c, x))
res70: List[List[String]] = List(List(b, c, x), List(c, x))
scala> someRecursiveFunction(list,"Some Word")
(List(a, b, c, x, y, z, k, j, g),List(Some Word, d, e, f, u, m, p))
(List(a, b, c, x, y, z),List(k, j, g))
(List(a, b, c),List(x, y, z))
(List(),List(a, b, c))
res71: List[List[String]] = List(List(a, b, c), List(b, c))