Isn't using find with retro awkward?

Steven Schveighoffer schveiguy at yahoo.com
Thu Feb 17 04:16:17 PST 2011


On Wed, 16 Feb 2011 17:58:12 -0500, jam <gr0v3er+d at gmail.com> wrote:

> On Wed, 16 Feb 2011 22:00:13 +0100, Andrej Mitrovic wrote:
>
>> On 2/16/11, jam <gr0v3er+d at gmail.com> 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


More information about the Digitalmars-d-learn mailing list