有人能解释一下为什么下面的代码会产生[2,3,5,7,11,13,17,19,23,29]
吗?我知道这和filter函数有关,它被推迟到最后一个元素,但是我没有看到图片。如果你能把它可视化就更好了。非常感谢。
val primes: Sequence<Int> = sequence {
var numbers = generateSequence(2) { it + 1 }
var prime: Int
while (true) {
prime = numbers.first()
yield(prime)
numbers = numbers.drop(1).filter { it % prime != 0 }
}
}
print(primes.take(10).toList())
1条答案
按热度按时间0yycz8jy1#
这是因为你改变了闭包中的变量,例如,在第二步中,你把
numbers
作为.filter { it % prime != 0 }.filter { it % prime != 0 }
,但是prime
是一个变量,它等于3
正确版本: