On Wed, 16 Feb 2011 17:58:12 -0500, jam <[email protected]> wrote:

On Wed, 16 Feb 2011 22:00:13 +0100, Andrej Mitrovic wrote:

On 2/16/11, jam <[email protected]> wrote:
void main()
{
    auto a = [5,1,2,3,4,5,1];
    auto index = countUntil(retro(a),5);
    writeln(a[a.length-1-index .. a.length]);
}


That works for random-access ranges.
But I was under the impression that bidirectional ranges don't
necessarily have a length property?

Doh.  That is exactly correct.  I guess the following would work for
bidirectional ranges:

import std.stdio,std.algorithm,std.range,std.container;

void main()
{
    auto a = [5,1,2,3,4,5,1];
    auto index = countUntil(retro(a),5);
    auto R = retro(take(retro(a),index+1));
    writeln(R);
    R[0] = 6;
    writeln(a);
}

but this is just getting nutty.


This doesn't work, you can't retro take because take is not a bidirectional range. It might work in the case of arrays, but it won't work for something like a string.

-Steve

Reply via email to