On Mon, 11 Oct 2010 23:34:41 -0400, Daniel Gibson <metalcae...@gmail.com> wrote:

Andrei Alexandrescu schrieb:
On 10/11/2010 08:57 PM, Daniel Gibson wrote:
But right now the point is: join() does something completely different
and should be renamed (or deprecated in std.string and replaced by
union() - a real join isn't needed in std.string anyway, but when join()
is deprecated in std.string you can implement a real join in
std.algorithm without causing too much confusion).
I think union() is a worse name than join(). The discussion was to generalize within reason std.string.join, which is present under that name and with that functionality in many other languages and libraries.
 Andrei

Okay, union does kind of suck, because it implies set semantics (and thus no ordering).

What about concat()?
It seems like join() is expected to work this way for strings.. but as a generic algorithm working on kind-of-cursors? std.algorithm already has some operations that are also in the relational algebra (setDifference, setIntersection, setUnion, Filter, even Group (like in group by) etc), adding a join (as in relational algebra join) implementation would only make sense - but how are you gonna name that thing if join() is already taken for some kind of "concatenation with additional seperator"? Sure, "setJoin" would be available, but having both join and setJoin doing completely different things would be confusing.

What about something like
char[] concat(char[][] words, char[] sep="") // or sep=null
in the string case and something equivalent in the ranges case?

Cheers,
- Daniel

Regarding the bike shed,
Well, std.range already has transversal( range_of_ranges , Nth) and frontTransversal(range_of_ranges). So there is some opportunity for both a transverse all elements, i.e. transversal( range_of_ranges ), and interleaved elements, i.e. transversal( range_of_ranges, separator ).

Reply via email to