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)
できました。