On Thu, Jul 26, 2012 at 7:56 PM, Stuart <stu...@gmx.com> wrote: > On Friday, 27 July 2012 at 00:10:31 UTC, Brad Anderson wrote: > >> D uses ranges instead of iterators. You can read more about them here: >> http://ddili.org/ders/d.en/**ranges.html<http://ddili.org/ders/d.en/ranges.html> >> >> I find ranges to be a vast improvement over iterators personally (I use >> iterators extensively in C++ for my job and lament not having ranges >> regularly). >> >> >> On Friday, 27 July 2012 at 00:17:21 UTC, H. S. Teoh wrote: > >> D has something far superior: ranges. >> >> http://www.informit.com/**articles/printerfriendly.aspx?** >> p=1407357&rll=1<http://www.informit.com/articles/printerfriendly.aspx?p=1407357&rll=1> >> >> Even better, they are completely implemented in the library. No >> unnecessary language bloat just to support them. >> > > I'm not very well up on ranges. I understand the general [1 ... 6] type of > ranges, but I really don't see how custom range functions could be as > useful as the Yield support in VB.NET. I mean, here's an example of an > iterator in VB.NET: > > Public Function InfiniteSequence(StartValue As Int32, Step As Int32) As > IEnumerable(Of Int32) > Do > Yield StartValue > StartValue += Step > Loop > End Function > > Usage: > > For Each N in InfiniteSequence(2, 2) > ... do something with this sequence of even numbers ... > Next > > Notice how this function is written like a synchronous loop, yet yields a > lazy-initialised infinite sequence of numbers. Granted, it's not a > particularly useful example, but trust me: Iterators and Yield in .NET is > *really* damn useful. I would go so far as to say it was one of the > language's best features. > > I may be wrong, but it looks like I'd have to code a new class - not to > mention several specific functions and some kind of state variable - just > to simulate this functionality in D. Can anyone clarify this for me? >
D equivalent: iota(0, int.max, 2).map!(a => /* do something with even numbers */)();