Super-dee-duper D features

Andrei Alexandrescu (See Website For Email) SeeWebsiteForEmail at erdani.org
Tue Feb 13 17:59:03 PST 2007


Sean Kelly wrote:
> Derek Parnell wrote:
>> On Tue, 13 Feb 2007 17:39:46 +0100, Frits van Bommel wrote:
>>
>>> Andrei Alexandrescu (See Website For Email) wrote:
>>>> Bill Baxter wrote:
>>>>> Yeh, I don't get it either.  How would that help me implement 
>>>>> merge() from merge sort for instance?
>>>> Merge bumps the iteration in both collections conditionally. The 
>>>> form above bumps the iteration in the two collections 
>>>> unconditionally, until one is finished; then it continues with the 
>>>> other until that is finished.
>>> In other words, it doesn't :(.
>>
>> I imaging that the full syntax will also include this form ...
>>
>>   foreach (int x, i ; coll1) (int y, j ; coll2)   {
>>    ... use i and j ...
>>      if (somecondition)
>>         x = ...  // To set the index back or forward to some
>>                  // arbitary point in the array 'coll1'.
>>   }
> 
> This currently works for built-in arrays but not for user-defined types. 
>  Also, I think the fact that it works as all is the result of an 
> implementation detail, not spec-defined behavior.

Besides it's awkward to have to decrement x if you want to "stay there" 
just so that you cancel the next increment. foreach is best for straight 
loops; in fact I think of it as the functional "map" as foreach 
(assuming the above gets fixed) has no imperative element to it.

Andrei



More information about the Digitalmars-d mailing list