以下の [Python 3.4] のプログラムは、単純なエラトステネスふるいです。
from itertools import *
def excl(ns,pr):
return (i for i in ns if i%pr)
def sieve(ns):
while True:
pr=next(ns)
yield pr
ns=excl(ns,pr)
# ns=(i for i in ns if i%pr)
r=list(islice(sieve(count(2)),10))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29] を生成します。わかった。excl() をインライン化する行のコメントを外し、呼び出しをコメントにすると、[2, 3, 4, 5, 6, 7, 8, 9, 10, 11] が得られます。なんで?
それを反復するループ内でシーケンスを変更するときに予想されるトラブルに関連していますか?
ヒントをありがとう。