Please vote once and for good: range operations

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Jan 28 20:51:18 PST 2009


Bill Baxter wrote:
> On Thu, Jan 29, 2009 at 1:25 PM, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
>> Simen Kjaeraas wrote:
>>> Andrei Alexandrescu wrote:
>>>
>>>> So please let's vote once and for all.
>>>>
>>>> Andrei
>>> Do let's. My first vote goes to first/last, with head/toe at second place.
>>>
>>> --
>>> Simen
>> Ok, after looking at my code I discovered a huge problem with "first".
>> ("Last" is cool.) If all you do is implement them and use them with foreach,
>> fine. But if you need to call them manually (which is the case sometimes),
>> you get really badly interacting terms there. Look at this, taken from real
>> code (the filter function):
>>
>> while (!_input.empty && !pred(_input.first)) _input.next;
>>
>> I can see the putative user scratching their head: "Ok, so I start iteration
>> with the first element, then I move to the next one... but then why the heck
>> am I looking at the first again?"
>>
>> "First" must go.
> 
> Can't you just think of it as the first of the range, not the first of
> everything?

I could, if "next" weren't called "next". If the current is called 
"first", "next" means to move to another quantum universe in which the 
current "first" is forgotten and what was after "first" in the previous 
universe is now "first". That doesn't strike me as intuitive :o).

> If you ask me who is first in line, I'm going to tell you who is the
> first in line right now, currently.  Not who was first back when the
> line first formed.  This seems similar to me.  So not confusing at all
> if you think of it that way.  The range is not the container.

That's a good point, but... we are at liberty to choose ANY names we 
please. Is this weird "first"/"next" combo our best shot?


Andrei



More information about the Digitalmars-d mailing list