[GAP Forum] creating arrays

Rudolf Zlabinger Rudolf.Zlabinger at chello.at
Wed Oct 11 13:24:38 BST 2006


As i needed arrays (for constructing functions for creating large matrices), i didnt find any suiting objects in GAPs docu, but perhaps its my fault and i only didnt find it.

List processing only allows for access to already bound elements and only one indexlevel for enlarging lists. So you cannot freely index list elements especially
for programming purposes creating and processing lists of arbitrary nesting levels.

So I wrote a function for the definition of arbitrary arrays of empty lists, and included it for interested people here. Alas this function has experimental status yet. May be there are errors or bugs, but in general this would be the direction to go for this purpose.

If you have knowledge of an equivalent standard function in GAP I would be grateful to get feedback.

Best regards, Rudolf Zlabinger
-------------- next part --------------
Array:=function(bounds)

# creates an array of empty lists of arbitrary nesting levels (dimensions)
# and bounds for each level
# bounds is a list of positive integers determining the length of each dimension
# the length of bounds is the dimension of the array

# at element level the dimension of the array is 1 higher, 
# as the last level are also empty lists

local array,IterateArray;

IterateArray:=function(array,bounds) 

# iterative call for decreasing levels of array and bounds

local i,dim,boundsrecall;

# i.. index, 
# dim the recent level of bounds, 
# boundsrecall.. shortened bounds for recalls

dim:=Length(bounds);                   # the varying length of bounds

for i in [1..bounds[1]] do              # 1 recallcascade for one add

  Add(array,[]);                         # enlarging the recent level of array
 
  if dim>1 then                          # dim=1 is the last level

    boundsrecall:=bounds{[2..dim]};        # shorten bounds for next level  
    IterateArray(array[i],boundsrecall);   # recursion for the next lower level of array   

  fi;                                    # end of dimension > 1 clause

od;                                    # end of bound loop

return array;
end;


array:=[];


array:=IterateArray(array,bounds);      # starting call of add cascade 


return array;
end;


More information about the Forum mailing list