From: matz@... (Yukihiro Matsumoto) Date: 2002-11-22T08:40:45+09:00 Subject: [ruby-dev:18893] Re: internal/external iterator (Re: Re: Enumerable#zip) まつもと ゆきひろです In message "[ruby-dev:18892] Re: internal/external iterator (Re: Re: Enumerable#zip)" on 02/11/22, Tanaka Akira writes: |ふむ。yield やイテレータ自身が値を持てるという話ですね。 | |generator.rb がイテレータの返り値を無視するということから考えると、 |generator.rb が話題になる話では値を必要としなかったわけで、外部イテレー |タと値が不要であるということにはなんらかの相関関係があるのかも。 そうかもしれません。 |> うーん、Pythonのはgeneratorだからイテレータではない(ので、外 |> 部・内部の分類の対象ではない)という論法はありえますよね。苦 |> しいけど。C#のは...もっと苦しいなあ。^^;;; | |それはちょっと... Python の用語にもイテレータはある(next() を呼べるよ |うなオブジェクトを指す)ので。 やっぱり。 |ちょっと疑問に思ったんですが、Smalltalk の流儀ではブロックを受け取るメ |ソッドをイテレータと呼ぶんでしょうか? あ、どうなんでしょう。do:以外のselect:などをイテレータと呼ぶ かってことですよね。 私はSmalltalk文化に暗いのでSmalltalkに詳しい人に聞いてみない と。この界隈では石塚さんが一番詳しいのかなあ。ご存じのように Rubyではかつてブロックを受け取るものすべてをイテレータと呼ん でいたという「前科」がありますから、イテレータという単語を濫 用している可能性はありますよね。 |Scheme でいえばクロージャを受け取る関数に対応するわけですが、Scheme の |流儀ではとくにそれを特別にイテレータなどと呼び分けることはないので。 mapとかreduceとかはなんと呼ぶんでしょうね。特別な用語はない? |(上でも述べたように、)たしかに値に対する無関心さと外部イテレータにはな |にかしらの相関関係があるのかも知れません。 | |でも、なんでだろう? うーん、なんとなく「値に対して無関心でないもの」というのは、 つまり「Rubyのイテレータ」いいかえると「Rubyだけがイテレータ と呼んでいるもの」で、Rubyのイテレータ(each)が内部イテレータ であるがゆえに、それらも内部イテレータと呼ばれているだけ、と いう恐い考えが浮かんでしまった。 それだと私が今まで考えてた内部と外部の差って言うのはますます 意味がないですよねえ。 まつもと ゆきひろ /:|)