Home About Contact
Kotlin

Kotlin で 無限リスト

Haskell では xs = [0..] を Kotlin ではどうするか?

これ:

generateSequence(0) { it+1 }

何が生成されたか調べる:

val a = generateSequence(0) { it+1 }
println(a) // kotlin.sequences.GeneratorSequence

a は kotlin.sequences.GeneratorSequence になる。

リストを得たければ:

val a = generateSequence(0) { it+1 }.take(3).toList()
println(a) // 0,1,2

take して toList() する。

具体的な使用例

たとえば、 次のようなポケモン名のリストがあったとして...

val pokemons = listOf("Pikachu", "Pidgeot", "Eevee", "Squirtle")

1-index 方式で index つきのポケモン名ペアを作り出すには:

// main.kts

val pokemons = listOf("Pikachu", "Pidgeot", "Eevee", "Squirtle")
val xs = generateSequence(1) { it+1 }.take(pokemons.size).toList() // 1,2,3,4
xs.zip(pokemons).forEach { pair-> println(pair) }

実行する:

$ kotlin -version
Kotlin version 2.2.0-release-294 (JRE 17.0.2+8-86)

$ kotlin main.kts
(1, Pikachu)
(2, Pidgeot)
(3, Eevee)
(4, Squirtle)

できました。