On Thu, Jul 26, 2012 at 7:56 PM, Stuart <stugol@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
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: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:
D has something far superior: ranges.
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.
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?