Kotlinで無限の長さの遅延リストを作成する

無限の長さの遅延リストの例として、自然数を列挙した遅延リストを定義する。

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」が値となる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください