Philippe Sigaud wrote:
On Tue, Jul 27, 2010 at 07:20, Andrei Alexandrescu <[email protected] <mailto:[email protected]>> wrote:


    * slicing a sorted range should produce a sorted range. so your
    wrapper range opIndex must be modified to account for this.

    Cool, makes sense.



Another thing, though I'm not sure it's a good idea, it to have them define an opIndex[ElementType!R e], that would just either forward to .find() or do a simple binary search by itself: O(lg(n)) is quite good. Yeah, isAssociativeRange!R ;)
But that's blurring the line between container and range, I guess.

One issue is dealing with sorted random-access ranges of size_t. Then there's ambiguity - which [] did you mean, searching on straight indexing?

In the same vein, a sorted range could optionally define opIn_r that also promises O(lg(n)) complexity.

This is a strong argument for putting sorted range functionality inside Sorted!Range.

As for taking ideas from other languages: in Clojure, data structures for which it makes sense (maps, sets?) are functions of their element and return true if the provided value is in the structure. That allows one to use them as predicate for finding and such, which makes for very clean code, as they also have encoded literal values.

Not getting it, could you please expand/insert a link?

Btw, should they really be called "sorted" or "ordered"? "sorted" implies there was a sorting action, which is not always the case. It may very well have been created that way.

Not sure, but as a putative user, with "sorted" I know 100% what's going on; with the slightly oblique "ordered" I might be worried enough to look up the manual.


Andrei

Reply via email to