Мне действительно нравится идея ленивых последовательностей в этом случае.Вы можете разбить свой алгоритм на 2 логических шага.
Сначала вы хотите работать со всеми натуральными числами (хорошо .. не все, но до макс. Целых), поэтому вы определяете их так:
val naturals = 0 to Int.MaxValue
Затем вам нужноопределить знания о том, как можно вычислить числа, которые вы хотите сложить:
val myDoubles = (naturals by 6 tail).view map (x => x * x)
И все это вместе:
val naturals = 0 to Int.MaxValue
val myDoubles = (naturals by 6 tail).view map (x => x * x)
val mySum = myDoubles take 10 sum
Я думаю, что математик подойдет к этой проблеме,И поскольку все коллекции лениво оцениваются - у вас не останется памяти.
Редактировать
Если вы хотите развить идею математической записи дальше, вы можете определить это неявное преобразование:
implicit def math[T, R](f: T => R) = new {
def ∀(range: Traversable[T]) = range.view map f
}
и затем определите myDoubles
следующим образом:
val myDoubles = ((x: Int) => x * x) ∀ (naturals by 6 tail)