On Wed, Jun 6, 2012 at 3:53 PM, Steven Schveighoffer <schvei...@yahoo.com> wrote: > On Mon, 04 Jun 2012 17:23:57 -0400, Xinok <xi...@live.com> 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
Circular buffers essentially start nowhere and end nowhere. Having a caret operator for slices would ease the manipulation of circular buffers and would allow one to "rotate" the buffer, essentially changing the cared and dollar value. -- Bye, Gor Gyolchanyan.