無限の長さの遅延リストの例として、自然数を列挙した遅延リストを定義する。
val seq = generateSequence(1) { i -> i + 1 }
for (i in seq) {
println(i)
}
実行結果は、以下のようになる。
1
2
3
以下続く
generateSequenceは2通りある。
引数を1つ取る場合。
fun <T : Any> generateSequence(
nextFunction: () -> T?
): Sequence<T>
引数を2つ取る場合。
un <T : Any> generateSequence(
seed: T?,
nextFunction: (T) -> T?
): Sequence<T>
引数を2つ取る場合は、seedの値が遅延リストの最初の値になる。
2回目以降はnextFunctionが前の値を引数にとり、nextFunctionの返す値が遅延リストの値となる。
val seq = generateSequence(1) { i -> i + 1 }
上の場合、generateSequenceの引数「1」がseqの最初の値となり、
2回目以降は、「前回の値+1」が値となる。