Dear GAP Forum,
On 4 Feb 2013, at 11:38, Denise Torrão <denisetor...@hotmail.com> wrote: > > Hello, my name is Denise and I'm starting to work in GAP. I'm trying to > compute a simple program, but I'm with some dificulty, because I implement a > cycle for, and my values of the list change. The program is the following: > algoritmo14:=function(p,D,c) > local soma, soma2, aux, aux3,i,A,x; > A:=[];A[1]:=[];x:=[]; > for j in [1..p-1] do A[1][j]:=0;od;A[1][p]:=c; > > for i in [1..p-1] do x[i]:=0;od;x[p]:=c; > i:=p-1; > soma:=0; > while (i>0) do for aux in [i+1..p] do > soma:=soma+D[aux]*x[aux]; od; if (soma >= D[i]) then > x[i]:=x[i]+1; x[p]:=soma-D[i]; > for aux3 in [i+1..p-1] do x[aux3]:=0; > od;Print("A1-> ",A,"\n"); > Add(A,x);Print("A2-> ",A,"\n"); i:=p-1; else > i:=i-1; fi; soma:=0;od; > > return A;end; > My problem is with the list A, that changes, and in the final all it's > elements (except for the first one) are equal. Can someone help me? I guess > is something very trivial, but as I said before, I'm taking my first steps > with GAP, so I still have a lot of dificulties with this program. > Very very thanks, > Denise Torrão I think the problem is the statement "Add(A,x)". This DOES NOT make a copy of x. A simple example is gap> l := [1]; [ 1 ] gap> m := []; [ ] gap> Add(m,l); gap> l[1] := 2; 2 gap> m; [ [ 2 ] ] gap> Here m[1] and l are THE SAME list and changes to that list can be seen through both routes. What you probably want is Add(A, ShallowCopy(x)); which does make a copy. Steve _______________________________________________ Forum mailing list Forum@mail.gap-system.org http://mail.gap-system.org/mailman/listinfo/forum