Ah, I see the error in my thinking now. Knowing what the ! signifies makes it make a lot more sense.
Thanks guys for putting up with a newbie. This was probably one of those 1 in the morning questions that I should have waited to look at the next day before asking for help; it seems obvious now. -- Sean On Thursday, December 11, 2014 3:26:12 AM UTC-6, Mike Innes wrote: > > Think of append!(X, Y) as equivalent to X = vcat(X, Y). You called append! > twice, so X gets Y appended twice. > > julia> X = [1,2]; Y = [3,4]; > > julia> X = vcat(X,Y) > [1, 2, 3, 4] > > In your example you went ahead and did this again: > > julia> X = (X = vcat(X, Y)) > [1, 2, 3, 4, 3, 4] > > But if you reset X, Y via the first statement and *then* call X = > append!(X, Y), it works as you would expect. > > julia> X = [1,2]; Y = [3,4]; > > julia> X = append!(X, Y) # same as X = (X = vcat(X, Y)) > [1, 2, 3, 4] > > On 11 December 2014 at 07:51, Alex Ames <alexande...@gmail.com > <javascript:>> wrote: > >> Functions that end with an exclamation point modify their arguments, but >> they can return values just like any other function. For example: >> >> julia> x = [1,2]; y = [3, 4] >> 2-element Array{Int64,1}: >> 3 >> 4 >> >> julia> append!(x,y) >> 4-element Array{Int64,1}: >> 1 >> 2 >> 3 >> 4 >> >> julia> z = append!(x,y) >> 6-element Array{Int64,1}: >> 1 >> 2 >> 3 >> 4 >> 3 >> 4 >> >> julia> z >> 6-element Array{Int64,1}: >> 1 >> 2 >> 3 >> 4 >> 3 >> 4 >> >> julia> x >> 6-element Array{Int64,1}: >> 1 >> 2 >> 3 >> 4 >> 3 >> 4 >> >> The append! function takes two arrays, appends the second to the first, >> then returns the values now contained by the first array. No recursion >> craziness required. >> >> On Thursday, December 11, 2014 1:11:50 AM UTC-6, Sean McBane wrote: >>> >>> Ivar is correct; I was running in the Windows command prompt and >>> couldn't copy and paste so I copied it by hand and made an error. >>> >>> Ok, so I understand that append!(X,Y) is modifying X in place. But I >>> still do not get where the output for the second case, where the result of >>> append!(X,Y) is assigned back into X is what it is. It would make sense to >>> me if this resulted in a recursion with Y forever getting appended to X, >>> but as it is I don't understand. >>> >>> Thanks. >>> >>> -- Sean >>> >>> On Thursday, December 11, 2014 12:42:45 AM UTC-6, Ivar Nesje wrote: >>>> >>>> I assume the first line should be >>>> >>>> > X = [1,2]; Y = [3,4]; >>>> >>>> Then the results you get makes sense. The thing is that julia has >>>> mutable arrays, and the ! at the end of append! indicates that it is a >>>> function that mutates it's argument. >>> >>> >