<分区>
我使用 Python 编写了一个简单的素筛(埃拉托色尼的无界筛),但出于某种原因,它无法正常工作。这是筛子:
from itertools import count
def sieve():
nums = count(2)
while True:
n = next(nums)
nums = filter(lambda k: k%n != 0, nums)
yield n
不幸的是,这不起作用。相反,它只返回与 count(2) 迭代器相同的值。
为了比较,这个:
nums = count(2)
print(next(nums))
nums = filter(lambda k: k%2 != 0, nums)
print(next(nums))
nums = filter(lambda k: k%2 != 0, nums)
print(next(nums))
将打印:
2
3
5
而筛选功能将打印:
2 3个 4
我认为问题出在 Python 的 lambda 的奇怪行为上,但替换这一行:
nums = filter(lambda k: k%n != 0, nums)
与:
def f(k): return k%n != 0
nums = filter(f, nums)
没有解决问题。