Monday, March 1, 2010

First recursive function I've written in years.


recurse:=function(G,B,i,g,f)
local j;
if Size(g) = (i-1) then
if Size(g) = Size(B) then
return f(g);
else
for j in Combinations(G,B[i]-1) do
return recurse(G,B,i+1,Concatenation(g,[j]),f);
od;
fi;
else return;
fi;
end;


global_array:=[];
fun:=function(G,B,g)
local gset,glist,difflist,gcopy,x,L,i,j,pos,idealdifflist;
#TODO Implement FindL, code's written, just wrap it up
L:=2;#FindL(G,B);
gcopy:=StructuralCopy(g);
gset:=Flat(gcopy);
glist:=List(G);
difflist:=ConstantArray(0,Size(G));
idealdifflist:=ConstantArray(L,Size(G));
idealdifflist[Position(glist,One(G))]:=0;
# if Id is not any one of the diffs;
if Positions(gset,One(G))<>[] then
return;
else
for i in [1..Size(gcopy)] do
Add(gcopy[i],One(G));
od;
#generate difflist
for i in [1..Size(gcopy)] do
for j in Tuples(gcopy[i],2) do
pos:=Position(glist,j[1]*j[2]^-1);
difflist[pos]:=difflist[pos]+1;
od;
od;
fi;
#verify difflist
if difflist = idealdifflist then
Add(global_array,g);
fi;
end;

No comments:

Post a Comment