Порождение элементов в Kotlin
Не каждая последовательность начинается с готовой
коллекции. Функция generateSequence принимает первое
значение и функцию, которая по текущему элементу
строит следующий. Пока функция возвращает не
null, цепочка может расти.
Старт с единицы и шаг плюс один дают натуральный ряд. Без ограничения длины пример не закончился бы, поэтому сразу возьмем первые пять чисел:
fun main() {
val naturals = generateSequence(1) { it + 1 }
.take(5)
.toList()
println(naturals)
}
Тот же механизм подходит для геометрической прогрессии: семя умножается на два на каждом шаге:
fun main() {
val powers = generateSequence(1) { it * 2 }
.take(4)
.toList()
println(powers)
}
Функция take здесь обязателен: иначе конечное действие
пыталось бы пройти бесконечный ряд. Ограничение
длины обрывает генерацию, когда набрано нужное
число элементов.
Постройте последовательность от 10 с шагом
минус три. Возьмите первые четыре значения и
выведите список.
Семя 3, каждый следующий элемент -
удвоение предыдущего. Возьмите первые пять
значений и выведите список.