improving the join function

Daniel Gibson metalcaedes at gmail.com
Mon Oct 11 20:34:41 PDT 2010


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


More information about the Digitalmars-d mailing list