Isn't using find with retro awkward?

Jonathan M Davis jmdavisProg at gmx.com
Wed Feb 16 16:09:18 PST 2011


On Wednesday, February 16, 2011 15:19:01 jam wrote:
> On Thu, 17 Feb 2011 00:05:15 +0100, Andrej Mitrovic wrote:
> > On 2/16/11, jam <gr0v3er+d at gmail.com> wrote:
> >> 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.
> > 
> > Nutty, but it's great how much lines you can save when composing ranges.
> > retro and take are both lazy afaik, so this can't be that bad?
> 
> Well take is for sure, but I'm not sure about retro(I didn't see anything
> in range.d or the online docs that indicate it is).  You could save some
> work by just reversing the container once at the start though.

All retro does is forward front and popFront to back and popBack and back and 
popBack to front and popFront. So, the only overhead is the extra function call, 
which is probably inlined anyway.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list