[Swift-devel] Join function?

Jonathan Monette jonmon at mcs.anl.gov
Tue Apr 3 15:43:39 CDT 2012


So Swift does have an @length built-in function that returns the length of an array.  Mike said he also tried coming up with a Swift function to this same think and said that @length does not always behave as he thought it should.  I am going to look into fixing @length so we do have a way finding the length of an array.

On Apr 3, 2012, at 2:44 PM, Mihael Hategan wrote:

> Nice!
> 
> I think though, fundamentally, there is no way to write this without
> either of:
> 1. length(array)
> 2. head/tail(array) (with the ability compare with [] - isEmpty(array)).
> 
> But there might be ways in which the above could be accomplished.
> 
> Mihael
> 
> On Tue, 2012-04-03 at 15:09 -0400, Glen Hocky wrote:
>> This seemed like an interesting challenge. The following works
>> assuming swift knows how many elements you have. However, there are
>> many simpler things I would /think/ should work that do not. There
>> seem to possibly be some bugs (i.e. things that don't seem
>> intentional) about declaring a variable before an iterate statement
>> and then writing to it on each iterate statement. Hence the use of
>> lists below. I will also put a second version after which I would
>> think should work but does not
>> 
>> 
>> Working:
>> 
>> 
>>        $ swift test.swift 
>>        Swift svn swift-r3826 cog-r2988
>>        RunID: 20120403-1509-3xnsrx10
>>        Progress:
>>        SwiftScript trace: this:is:a:test
>>        Final status:
>> 
>> 
>> 
>> 
>>        (string j[]) join(string s[], string c, int n){
>>            j[0]="";
>>            iterate i {
>>                if(i<n-1){
>>                    j[i+1]=@strcat( j[i], s[i]+c );
>>                }
>>                else{
>>                    j[i+1]=@strcat( j[i], s[i] );
>>                }
>>            } until(i==n-1);
>>        }
>>        string a[];
>>        a[0] = "this";
>>        a[1] = "is";
>>        a[2] = "a";
>>        a[3] = "test";
>>        int nelements=4;
>>        string j[];
>>        j = join( a, ":", nelements );
>>        trace(j[nelements]);
>> 
>> 
>> Not working (error, jlist has multiple writers):
>>        (string j) join(string s[], string c, int n){
>>            string jlist[];
>>            jlist[0] = "";
>>            iterate i {
>>                if(i<n-1){
>>                    jlist[i+1]=@strcat( jlist[i], s[i]+c );
>>                }
>>                else{
>>                    jlist[i+1]=@strcat( jlist[i], s[i] );
>>                }
>>            } until(i==n-1);
>>            j = jlist[n];
>>        }
>>        string a[];
>>        a[0] = "this";
>>        a[1] = "is";
>>        a[2] = "a";
>>        a[3] = "test";
>>        int nelements=4;
>>        string j;
>>        j = join( a, ":", nelements );
>>        trace(j);
>> 
>> 
>> 
>> 
>> 
>> On Tue, Apr 3, 2012 at 2:02 PM, David Kelly <davidk at ci.uchicago.edu>
>> wrote:
>>        Hello,
>> 
>>        Is there a way to concatenate all elements of an array into a
>>        single string? I would also like to define a separator between
>>        elements. I was thinking of something similar to Perl's join
>>        function.
>> 
>>        If I have:
>> 
>>        string a[];
>>        a[0] = "this";
>>        a[1] = "is";
>>        a[2] = "a";
>>        a[3] = "test";
>> 
>>        How can I get it into "this is a test" or "this:is:a:test"?
>>        @strcat returns a reference. I can tracef with %q and get
>>        "[this,is,a,test]", but it doesn't give me any control over
>>        the formatting as far as I know.
>> 
>>        I could call a shell script to do this, just wondering if
>>        there was another way.
>> 
>>        David
>>        _______________________________________________
>>        Swift-devel mailing list
>>        Swift-devel at ci.uchicago.edu
>>        https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel
>> 
>> 
>> _______________________________________________
>> Swift-devel mailing list
>> Swift-devel at ci.uchicago.edu
>> https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel
> 
> 
> _______________________________________________
> Swift-devel mailing list
> Swift-devel at ci.uchicago.edu
> https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-devel




More information about the Swift-devel mailing list