On Mon, 04 Jun 2012 17:23:57 -0400, Xinok <[email protected]> wrote:
On Saturday, 2 June 2012 at 11:49:17 UTC, Dario Schiavon wrote:
Hi,
I just read some old threads about opDollar and the wish to have it
work for non zero-based arrays, arrays with gaps, associative arrays
with non-numerical indices, and so on. It was suggested to define
opDollar as the end of the array rather than the length (and perhaps
rename opDollar to opEnd to reflect this interpretation), so that
collection[someIndex .. $] would consistently refer to a slice from
someIndex to the end of the collection (of course the keys must have a
defined ordering for it to make sense).
I'm just thinking, if we want to generalize slices for those cases,
shouldn't we have a symmetrical operator for the first element of the
array? Since the $ sign was evidently chosen to parallel the regexp
syntax, why don't we add ^ to refer to the first element? This way,
collection[^ .. $] would slice the entire collection, just like
collection[].
Until now, ^ is only used as a binary operator, so this addition
shouldn't lead to ambiguous syntax. It surely wouldn't be used as often
as the opDollar, so I understand if you oppose the idea, but it would
at least make the language a little more "complete".
The problem I see with this, it would be a larger burden when writing
generic code. Libraries would have to be written to compensate for those
containers. I'd prefer that all containers are simply zero-based, unless
there's a need for negative indices (i.e. pointers). I think
random-access ranges may be intended to be zero-based as well.
caret would have to map to 0 for slices and containers who already have a
notion of first element being zero.
This would not be hard. And in fact, would make generic code *easier*.
Right now, you have to special case containers who support slicing but do
not start on 0. The only one I know of at this point is Red Black Tree.
-Steve