助田です.
In [ruby-list:13636] Re: internal/external iterator (was Re: iterator for
Dummies)

>前田です。

>> ん?
>> ナニによって駆動されているか?ではなくて
>> ナニが注目されているか?の差だと
>> 思って読んでいたんですが…違いました?

>すみませんが、何をおっしゃりたいのかわかりません。

えーと,私なりの解釈は

内部イテレータの特徴
1.繰り返しの処理はイテレータを提供する側で行う.
2.イテレータを利用する側に渡されるのは,値そのもの.
  値そのものなのでそれを使って次の値を求めることはできない.
  (「値そのもの」というのは語弊がちょっとあるかも知れません
   がうまい表現が見つからない.)

外部イテレータの特徴
1.繰り返しの処理はイテレータを利用する側で行う.
2.イテレータを利用する側に渡されるのは,値を指し示す目印
  (値1つが入った入れ物)
  値を指し示す目印を使って次の値を指し示す目印を取得する
  ことができる.

主に1.の視点でイテレータをみているのが前田さんで,
主に2.の視点でイテレータをみているのがA.中村さん
ではないでしょうか.

1.の視点でみれば
繰り返しの処理を
 イテレータの*内部*(提供側)でやるのが内部イテレータ
 イテレータの*外部*(利用者側)に任せるのが外部イテレータ

2.の視点でみれば
 イテレータの「値そのもの」(値1つの入れ物がなく外側を覆う
 ものはなにもないから*内部*)を提供するのが内部イテレータ
 イテレータの「値の目印」(値1つの入れ物を提供し値の外側を
 それで覆うので*外部*)を提供するのが外部イテレータ

私は,「内部イテレータ」「外部イテレータ」の定義を知らないので
勘違いしているかも知れません.

--------------------------------------------
助田雅紀(masaki.suketa / systemplaza.co.jp)
--------------------------------------------