On Thu, Apr 10, 2008 at 10:56 PM, Tony Balinski <[EMAIL PROTECTED]> wrote:
> Quoting Bert Wesarg <[EMAIL PROTECTED]>:
>
>
> > On Thu, Apr 10, 2008 at 10:07 AM, Joachim Lous <[EMAIL PROTECTED]> wrote:
>  > > On Thu, Apr 10, 2008 at 6:23 AM, Tony Balinski <[EMAIL PROTECTED]> wrote:
>  > >  >  A bit misleading this: if you have the array
>  > >  >   arr[0] = 0
>  > >  >   arr[1] = 1
>  > >  >   arr["key0"] = 2
>  > >  >   arr["key1"] = 3
>  > >  >  adding arr[] = 999 will provide arr[2], not arr[4] as I would expect
>  > from the
>  > >  >  right-hand-side behaviour of arr[] (it's not the same as arr[arr[]] =
>  > 999). I
>  > >  >  find this counter-intuitive.
>  > >
>  > >  Maybe so, but the only other common languages I know that mix numeric
>  > >  and associative arrays in the same object are Javascript and PHP, and
>  > >  both assign numeric keys in this way when you push an unnamed value
>  > >  into an array (although with Javascript you have to call "push", not
>  > >  just use an empty bracket)
>
> > >
>  > I didn't know about JS, but I have modeled this after the PHP behaviour.
>  >
>  > But I can understand the point from Tony and Aaron.
>  >
>  > Maybe a drastically syntax extension is needed:
>  >
>  > rvalue: [EMAIL PROTECTED]        := return max numeric index + 1
>  > lvalue: [EMAIL PROTECTED] = expr := push expr at position max numeric 
> index + 1
>
>  A "push()" function would work. I don't much like in the above the
>  notion of lhs [EMAIL PROTECTED] accessing an element while rhs [EMAIL 
> PROTECTED] gives an index.
>  With the above rules, the following statements are equivalent:
>           [EMAIL PROTECTED] = expr
>           [EMAIL PROTECTED] = expr
Thats right and was intended in this suggestion.

>
>  I see the following needs:
>  1. "reseating" indices (starting at 0 to starting at 1, say);
>  2. removing holes in a sequence;
>  3. concatenating sequences;
>  4. finding first and last index values.
>
>  How about shift operators? (These don't exist for integers yet BTW)
>  They would shift indices as follows:
>  eg
>   arr >>= 1     # reorganise num indices to start with 1 in array arr
>   arr <<= 10    # reorganise num indices to end with 10-1 in array arr
>
>  the result contains a sequence in which all numeric indices have been
>  renumbered with consecutive indices (perhaps negative) to satisfy the
>  contraint of a fixed start/end position. So, given the args() function
>  ("define args { return $args }") and my anonymous array constructor
>  syntax,
>
>   args(1, 2, 3, .hello="hi")  equals  { 1, 2, 3, .hello = "hi" } >> 1
>
>  When both arguments to shift are arrays:
>
>   arr2 >> arr1  # an array where sequence arr2 has indices after arr1
>   arr1 << arr2  # the opposite
>   arr1 <<= arr2 # add arr2 sequence to end of arr1
>   arr1 <<= { value } # add a value to the end of the sequence in arr1
>
>  For each of these, numeric indices are compacted to start at the lowest
>  valued index from arr1 and grow consecutively to address all numerically
>  accessed values up to the last from arr2, while doing the equivalent of
>  arr1 + arr2 for string-accessed values (ie the union of string indices,
>  with, for duplicate indices, values taken from arr2).
>
>  Or maybe just allow array concatenation to do that:
>   arr1 arr2
>
>  Hmmm.
Nice thoughts.

Bert
>
>  Tony
-- 
NEdit Develop mailing list - [email protected]
http://www.nedit.org/mailman/listinfo/develop

Reply via email to