groupBy predicates: unary, binary, or both?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Dec 29 08:14:07 PST 2013


On 12/29/13 2:20 AM, monarch_dodra wrote:
> There is precedence for this in phobos with schwatzSort: It use a
> unaryFun, followed by a binaryFun.
>
> I've found this works quite well: More often than not, a unary fun is
> more than enough (the default "a < b"/"a == b" is fine). And in the
> cases where you *do* need binary comparison, then having a unary fun
> anywas is fine. EG:
>
> "MHklfsJKGsfd".byGroup!(std.uni.tolower, "a < b")();
>
> I think it is both an elegant and efficient approach. That's what I'd go
> for.

Hm so that's different from both my suggestions. It's also more 
difficult to explain, though indeed there's precedent with schwartz.

> I think we should handle non-commutative predicates. It's not actually
> *that* much more complicated. Instead of storing in each Group a value +
> range, simply save the range twice, and have one range be 1 step ahead
> of the first. I think a few phobos algos do this. minPos does something
> kind of similar.

The existing pull request already supports non-commutative predicates by 
means of copying the front. I'd thought about using the 
step-behind-range trick but that's less efficient than a copy in many 
cases. It's more general though as you point out, so I'll probably 
switch to that.


Andrei



More information about the Digitalmars-d mailing list