Super-dee-duper D features

kris foo at bar.com
Tue Feb 13 19:42:39 PST 2007


Bill Baxter wrote:
> Bill Baxter wrote:
> 
>>>> --bb
>>>
>>>
>>>
>>> Why would it return a tuple? Would the collection content be of 
>>> differing types? If not, then the InterleavedIterator would likely 
>>> have an opApply() for use in the foreach? That's how the Tango one 
>>> operates, fwiw.
>>
>>
>>
>> I must not understand what your InterleavedIterator does then.  I'm 
>> thinking of something like:
>> char[][] names = ["chuck", "barney", "bart"];
>> int[] ids = [12983, 32345, 39284];
>>
>> foreach (x; InterleavedIterator(names,ids)) {
>>    writefln("Name=%s id=%s", x[0], x[1]);
>> }
>>
> 
> And here's a partial hypothetical implementation
> 
> struct InterleavedIterator(Types...)
> {
>    alias GetElementTypes!(Types) ElemTypes;
> 
>    static InterleavedIterator opCall(Types arg) {
>       InterleavedIterator lists = arg;
>    }
> 
>    int opApply( int delegate(inout ElemTypes) body) {
>        ElemTypes x;
>        for(uint i=0; i<; i++) {
>            foreach(j,inout L; lists) x[j] = L[i];
>            int ret = body(x);
>            if (ret) return ret;
>        }
>        return 0;
>    }
> 
>    Types lists;
> }
> 
> Obviously it doesn't work right now because you can't do some of those 
> things with tuples.  But it would be nice if you could.  We're really 
> not too far from something like that working.  Especially when inout 
> gets sorted out.
> 
> Making tuples more powerful and general, IMHO, would have many benefits.
> 
> In the static,strongly typed functional languages like ML and haskell, 
> lists and tuples are the core data structures.  They're pretty similar 
> to D tuples, except in ML and haskell you can return them from functions 
> and otherwise manipulate them as first-class entities.
> 
> --bb

Yes, would be wonderful if D could support Tuples in that manner :)



More information about the Digitalmars-d mailing list