9.12 构建无穷惰性序列

我们可以使用 buildSequence 序列生成器 ,构建一个无穷惰性序列。

  1. val fibonacci = buildSequence {
  2. yield(1L)
  3. var current = 1L
  4. var next = 1L
  5. while (true) {
  6. yield(next)
  7. val tmp = current + next
  8. current = next
  9. next = tmp
  10. }
  11. }

我们通过buildSequence创建一个协程,生成一个惰性的无穷斐波那契数列。该协程通过调用 yield() 函数来产生连续的斐波纳契数。

我们可以从该序列中取出任何有限的数字列表,例如

  1. println(fibonacci.take(16).toList())

的结果是:

  1. [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]