Бесконечная последовательность в Kotlin
Функция generateSequence может работать без явного
семени: лямбда сама выдает очередной элемент, пока
не вернет null. Если условие остановки не
задано, поток теоретически не имеет конца.
Счетчик в локальной переменной растет на каждом
вызове. Конечное действие без take здесь
опасно - обход не завершился бы:
fun main() {
var n = 0
val endless = generateSequence { n++ }
val head = endless.take(6).toList()
println(head)
}
Функция take отрезает конечный кусок, и только
после этого toList материализует шесть
значений. Исходная последовательность при этом
остается бесконечной в описании.
Тот же прием с семенем и правилом плюс один: ряд не ограничен, но наружу уходит только часть:
fun main() {
val stream = generateSequence(100) { it + 1 }
val window = stream
.filter { it % 10 == 0 }
.take(3)
.toList()
println(window)
}
С помощью generateSequence без семени
выдайте нечетные числа начиная с 1
через локальный счетчик. Возьмите первые пять
и выведите список.
Постройте бесконечный ряд степеней двойки от
1. Оставьте только значения не больше
64, возьмите не более четырех элементов
и выведите их сумму.