我无法理解Kotlin中的generateSequence函数

时间:2019-03-01 20:59:30

标签: kotlin

我对Kotlin中的h1感到困惑。我似乎在阅读手册时全错了:

这是函数签名(用于带有种子的generateSequence):

generateSequence

因此fun <T : Any> generateSequence( seed: T?, nextFunction: (T) -> T? ): Sequence<T> 的种子类型应相同,下一个值也应用于下一个迭代生成。...

但是这个男人的例子是:

Sequence

因此,看来fun fibonacci(): Sequence<Int> { return generateSequence(Pair(0, 1), { Pair(it.second, it.first + it.second) }).map { it.first } } ​ println(fibonacci().take(10).toList()) // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 的类型是Sequence,种子的种子是Int

生成器函数将Pair<Int, Int>映射到Pair<Int, Int>

如何构造发送到生成器的下一个值?生成下一个Int的位置是什么(生成器的输出为Pair<Int, Int> ...)?

该函数如何知道何时停止?生成器从不返回Int

1 个答案:

答案 0 :(得分:2)

  

所以看来序列的类型是Int,种子是Pair。

给定的fibonacci()函数使用generateSequence()生成Pair的序列,然后使用map函数将该序列转换为{{1}的序列}。

Int

如果可以帮助您考虑一下,您可以想象先生成“整个”第一个序列,然后再将任何对转换为整数。

  

该函数如何知道何时停止?

不是。但是该示例使用the take() function将序列截断为前10个项目,然后打印该序列而不是打印无限序列。