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

Reply via email to