まつもと ゆきひろです

In message "[ruby-list:12918] Sieve of Eratosthenes (Re: [ruby-dev:6094])"
    on 99/03/17, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:

|ところで質問です。(原2)を
|
|(原4)
|max = Integer(ARGV.shift || 100)
|sieve = (2 .. max).to_a
|
|sieve.each { |i|
|  sieve.delete_if{ |j|
|    j > i && j % i == 0
|  }
|}
|puts sieve.join ", "
|
|と書いたら each は正常に動作するのは保証されてましたっけ?

質問をまとめると each の最中に要素を削除した時に「正常に」動
作するか,ということですよね.

正常の定義によりますが,現状(と作者の意図)は

  * each最中に要素を削除しても異常終了することはない

  * ただし,削除しなかったすべての要素に対して繰り返しを行う
    ことは保証しない

です.以前,いろいろ考えたのですが,この辺が妥協点のようです.

                                まつもと ゆきひろ /:|)