Dear Anvita, A new variable is allocated in fuction calls, and therefore in Example 2 the variable l is not affected. However, lists are passed by reference, and not copied; therefore, the contents of l are changed in Example 1.
Consider Example 1.5: gap> f1:=function(l) > l := l+[1]; > return l; > end; function( l ) ... end Then this example behaves just like Example 2. (I don't think that any programming language would consider copying lists before passing them to a function; this is usually too expensive in computational time). Moral: you may change _l_ without affecting the argument; you may not change _l's contents_. Best, Laurent On 8/13/07, Anvita <[EMAIL PROTECTED]> wrote: > Dear Forum, > > Could someone please explain to me why in some cases > a function call may result in a change of the argument's > value while in others it does not. (See in the two examples below > the behavior of the value of "a"). The chapter 4.10 > of the manual says that for each argument of a function > GAP allocates a new variable. Doesn't it mean that > the initial variable's value should always remain intact? > > Thank you, > Anvita > > ### Example 1 ### > > gap> f1:=function(l) > > l[1]:=l[1]+1; > > return l; > > end; > function( l ) ... end > gap> > gap> a:=[1]; > [ 1 ] > gap> b:=f1(a); > [ 2 ] > gap> a; > [ 2 ] > > ### Example 2 ### > > gap> f2:=function(l) > > l:=l+1; > > return l; > > end; > function( l ) ... end > gap> > gap> a:=1; > 1 > gap> b:=f2(a); > 2 > gap> a; > 1 > ------------------------------- > _______________________________________________ > Forum mailing list > [email protected] > http://mail.gap-system.org/mailman/listinfo/forum > -- Laurent Bartholdi \ laurent.bartholdi<at>gmail<dot>com EPFL SB SMA IMB MAD \ Téléphone: +41 21-6935458 Station 8 \ Secrétaire: +41 21-6935471 CH-1015 Lausanne, Switzerland \ Fax: +41 21-6930339 _______________________________________________ Forum mailing list [email protected] http://mail.gap-system.org/mailman/listinfo/forum
