On 2/2/15 2:42 PM, "Ulrich =?UTF-8?B?S8O8dHRsZXIi?= <kuett...@gmail.com>" wrote:
On Friday, 30 January 2015 at 23:17:09 UTC, Andrei Alexandrescu wrote:
Sorry, I thought that was in the bag. Keep current semantics, call it
chunkBy. Add the key to each group when the predicate is unary. Make
sure aggregate() works nice with chunkBy().

I might miss some information on this, so please forgive my naive
question. Your requirements seem to be contradictory to me.

1. aggregate expects a range of ranges

Probably we need to change that because aggregate should integrate seamlessly with chunkBy.

2. you ask chunkBy to return something that is not a range of ranges

Yah.

3. you ask chunkBy to play along nicely with aggregate

Yah.

There are certainly ways to make this work. Adding a special version of
aggregate comes to mind. However, I fail to see the rational behind this.

Rationale as discussed is that the key value for each group is useful information. Returning a range of ranges would waste that information forcing e.g. its recomputation.

To me the beauty of range is the composibility of "simple" constructs to
create complex behavior. The current chunkBy does not need to be changed
to "add the key to each group when the predicate is unary":

  r.map!(pred, "a")
   .chunkBy!("a[0]")
   .map!(inner => tuple(inner.front[0], inner.map!"a[1]"));

So I'd like to know why the above is inferior to a rework of the
chunkBy's implementation. Maybe this is a question for D.learn.

Wouldn't that force recomputation if a more complex expression replaced a[0]?


Andrei

Reply via email to