The value of the variable i is not bound at function definition. Rather, whatever i 's value at function execution is what is used.
After the loop the variable i has the value 5. Hence calling each instance F[i] returns the same value. You can accomplish what you want by writing a function that creates the function (binding the value i): factory := function(i) return function(n) return n+i; end; end; gap> F:=[]; gap> for i in [1..5] do > F[i]:=factory(i); > od; Then gap>F[1](1); 2 gap>F[2](1); 3 gap>F[3](1); 4 Gives what you want. Robert F. Morse On Wed, Sep 11, 2013 at 10:21 AM, Le Van Luyen <lvlu...@gmail.com> wrote: > Dear all, > > I want to create a list of functions in GAP and I have used the following > code lines: > > gap> F:=[]; > gap> for i in [1..5] do >> F[i]:=function( n) >> return n+i; >> end; >> od; > > I expect the result will be: F[1](1)=2; F[2](1)=3; F[3](1)=4 > > But, In GAP > > gap>F[1](1); > 6 > gap>F[2](1); > 6 > gap>F[3](1); > 6 > > It looks like all functions of list A are the same. > > Could you give me a way to create a list of functions like that? > > Thank you very much. > > Bests, > > Luyen > _______________________________________________ > Forum mailing list > Forum@mail.gap-system.org > http://mail.gap-system.org/mailman/listinfo/forum _______________________________________________ Forum mailing list Forum@mail.gap-system.org http://mail.gap-system.org/mailman/listinfo/forum