improving the join function

Robert Jacques sandford at jhu.edu
Mon Oct 11 22:35:30 PDT 2010


On Mon, 11 Oct 2010 23:34:41 -0400, Daniel Gibson <metalcaedes at 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 ).


More information about the Digitalmars-d mailing list