SequenceScope

abstract class SequenceScope<in T>

The scope for yielding values of a Sequence or an Iterator, provides yield and yieldAll suspension functions.

Since Kotlin

1.3

Samples

import samples.*
import kotlin.test.*
fun main() { 
   //sampleStart 
   val sequence = sequence {
    val start = 0
    // yielding a single value
    yield(start)
    // yielding an iterable
    yieldAll(1..5 step 2)
    // yielding an infinite sequence
    yieldAll(generateSequence(8) { it * 3 })
}

assertPrints(sequence.take(7).toList(), "[0, 1, 3, 5, 8, 24, 72]") 
   //sampleEnd
}
import samples.*
import kotlin.test.*
fun main() { 
   //sampleStart 
   fun fibonacci() = sequence {
    var terms = Pair(0, 1)

    // this sequence is infinite
    while (true) {
        yield(terms.first)
        terms = Pair(terms.second, terms.first + terms.second)
    }
}

assertPrints(fibonacci().take(10).toList(), "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]") 
   //sampleEnd
}

See also

Functions

yield
Link copied to clipboard
abstract suspend fun yield(value: T)

Yields a value to the Iterator being built and suspends until the next value is requested.

yieldAll
Link copied to clipboard
suspend fun yieldAll(elements: Iterable<T>)

Yields a collections of values to the Iterator being built and suspends until all these values are iterated and the next one is requested.

abstract suspend fun yieldAll(iterator: Iterator<T>)

Yields all values from the iterator to the Iterator being built and suspends until all these values are iterated and the next one is requested.

suspend fun yieldAll(sequence: Sequence<T>)

Yields potentially infinite sequence of values to the Iterator being built and suspends until all these values are iterated and the next one is requested.