Если я правильно понимаю вашу проблему.
Это должно сделать то, что вы хотите:
def ShiftedSchwefelRecursive[N : Numeric](data: List[N]): N = {
import Numeric.Implicits._
val zero = Numeric[N].zero
val one = Numeric[N].one
@annotation.tailrec
def loop(remaining: List[N], acc: N, idx: N): N =
remaining match {
case n :: tail =>
val sum = n * idx
loop(
remaining = tail,
acc + (sum * sum),
idx + one
)
case Nil =>
acc
}
loop(remaining = data, acc = zero, idx = one)
}
Или вы можете просто использовать функции более высокого порядка, чтобы express этот алгоритм был более кратким.
def ShiftedSchwefelHOF[N : Numeric](data: List[N]): N = {
import Numeric.Implicits._
data
.iterator
.zipWithIndex
.map {
case (n, idx) =>
n * Numeric[N].fromInt(idx + 1)
}.map { x =>
x * x
}.sum
}