Infinite BidirectionalRange?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Dec 25 07:33:58 PST 2010


On 12/24/10 4:19 PM, Ali Çehreli wrote:
> isRandomAccessRange at
>
> http://digitalmars.com/d/2.0/phobos/std_range.html#isRandomAccessRange
>
> describes what a RandomAccessRange is:
>
> <quote>
>
> A random-access range is a bidirectional range that also offers the
> primitive opIndex, OR an infinite forward range that offers opIndex. In
> either case, the range must either offer length or be infinite. The
> following code should compile for any random-access range.
>
> R r;
> static assert(isForwardRange!(R)); // range is forward
> static assert(isBidirectionalRange!(R) || isInfinite!(R));
> // range is bidirectional or infinite
> auto e = r[1]; // can index
>
> </quote>
>
> The part that starts with "In either case" does not make sense to me
> (and the sample code does not cover all possible cases). It seems to
> suggest that a RandomAccessRange may be an infinite BidirectionalRange.
>
> Since a BidirectionalRange defines both front() and back(), its being
> infinite can only come from asymptoting at one or more points in between
> the two ends. Is that useful?
>
> Does the document need correction or my understanding? :)
>
> Ali

The document I think. Essentially I meant to define the conceptual 
hierarchy as in this figure:

http://ptgmedia.pearsoncmg.com/images/art_alexandrescu3_iterators/elementLinks/alexandrescu3_fig03.jpg

and as described in the associated article 
http://www.informit.com/articles/printerfriendly.aspx?p=1407357

So what would be a better formulation?


Andrei


More information about the Digitalmars-d mailing list