[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