generateSequence

Returns a sequence which invokes the function to calculate the next value on each iteration until the function returns null.

fun <T : Any> generateSequence(nextFunction: () -> T?): Sequence<T>(source)
fun main() {
    var a = 0
    var b = 1

    val fibonacci = generateSequence {
        val next = a          // current value to emit
        a = b                // advance to next pair
        b += next
        next                 // return current value
    }

    val firstTen = fibonacci.take(10).toList()
    println(firstTen)   // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
}

Source