The scope for yielding values of a Sequence or an Iterator, provides yield and yieldAll suspension functions.
import kotlin.test.*
fun main(args: Array<String>) {
//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 })
}
println(sequence.take(7).toList()) // [0, 1, 3, 5, 8, 24, 72]
//sampleEnd
}
import kotlin.test.*
fun main(args: Array<String>) {
//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)
}
}
println(fibonacci().take(10).toList()) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
//sampleEnd
}
See Also
Yields a value to the Iterator being built and suspends until the next value is requested.
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.
Yields a collections of values to the Iterator being built and suspends until all these values are iterated and the next one is requested.
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.
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/-sequence-scope/index.html