ところで、現在Enumerable#selectなど一連のメソッドは Arrayを返しているわけだが、 これをEnumeratorを返すようにすると、一種の遅延実行が実現できるのではないだろうか。
イテレーションの中でしか実行できないので、 関数型言語における遅延実行のようなわけにはいかないけれども。
要素数が非常に多くなると効率に違いが出てくるかもしれない。 無限な要素([1..]とか)も扱えるようになる。
とりあえず、将来への布石として 1.upto(3)などをブロックなしで呼んだときにはEnumeratorを返すようにする。
うーん、あんまり布石になってないかな。
Enumerator化期待してます。
>Enumeratorを返す
C# 3.0 の LINQ がまさにそれですね.
一歩進んで delegate-to-expression-tree translator を返すようにしたのが DLINQ,XLINQ と.
http://www.idealliance.org/xmlusa/05/call/xmlpapers/63.1015/.63.html
訂正です.
>delegate-to-expression-tree translator を返す
というよりは,イテレーションの連鎖全体を現す Query オブジェクトですね.返すのは.
で,「イテレーションの連鎖」から後で SQL を組み立てるのが DLINQ と.
C#でEnumeratorを返すっていうとLINQよりはyieldを思い出すんですが、これは全然違うんでしょうか?
http://www.theserverside.net/articles/showarticle.tss?id=IteratorsWithC2
>yield
C:\Program Files\LINQ Preview\Docs\Sequence.cs に LINQ のオペレータの参照実装が存在するんですが,yield による pipeline pattern のオンパレードです.
というわけで根っこは同じかと.