Here are some hopefully helpful suggestions from Alexander Konovalov, Steve Linton, and myself.

R. Keith Dennis wrote:
Dear Colleagues:

I have several questions and would appreciate any suggestions.  I've
only recently attempted to do any real programming in GAP, so probably
the solutions are obvious:

1.  How does one generate file names (by program) so that a given
session may have multiple output files?  E.g., run a program without
for each group order - test.16, test.32, test.64,...  or append a time
stamp, or even better, "if file xxx.001 exists then newfile name =
xxx.002".

LogTo didn't seem to accept the names I attempted to give in (in
quotes, it used the variable name & without gave an error).

Some functions that take "string-like" arguments will convert your input for you, but some really require strings, or even a single string. LogTo and the related function PrintTo both require the filename to be a string.

You can create such a string using the String and Concatenation functions. For instance

gap> Concatenation("myfile.",String(23));
"myfile.23"

or an old trick for padding:

gap> Concatenation("myfile.",String(1023){[2..4]});
"myfile.023"

You can check if a file already exists with IsExistingFile:

gap> n:=1001;;
gap> fn:=Concatenation( "myfile.", String(n){[2..4]} );;
gap> while IsExistingFile( fn ) do
>      n:=n+1;
>      fn:=Concatenation( "myfile.", String(n){[2..4]} );
>    od;
gap> fn;
"myfile.017"

Most likely if you really want 999 output files, you will also want to use the PrintTo function rather than LogTo. LogTo is more suited to interactive sessions, and PrintTo is more suited to programming.

2.  How does one trap errors?  E.g., something like

if defined NumberSmallgroups(n) then
   Print(.....);
 else   
   Print("NumberSmallGroups(",n,") is not defined\n");
fi;

There is no method in GAP to trap errors, but the list of orders covered by the small groups library is at:

  http://www.tu-bs.de:8080/~hubesche/small.html

If you would like, we would be happy to forward you this list as a simple GAP function that returns true/false based on whether an integer falls into one of these categories.

3.  How does one convert a matrix with integer entries to a matrix
with entries mod q for some prime q?

You can multiply it by the identity element from the appropriate
residue class ring or finite field:

gap> [[1,2],[8,4]]*ZmodnZObj(1,6);
[ [ ZmodnZObj( 1, 6 ), ZmodnZObj( 2, 6 ) ],
  [ ZmodnZObj( 2, 6 ), ZmodnZObj( 4, 6 ) ] ]

gap> [[1,2],[8,4]]*ZmodnZObj(1,5);
[ [ ZmodpZObj( 1, 5 ), ZmodpZObj( 2, 5 ) ],
  [ ZmodpZObj( 3, 5 ), ZmodpZObj( 4, 5 ) ] ]

gap> [[1,2],[8,4]]*One(GF(5));
[ [ Z(5)^0, Z(5) ], [ Z(5)^3, Z(5)^2 ] ]

Or if you prefer to have integer entries reduced to their least nonnegative residue mod q, you can just use "mod q":

gap> [[1,2],[8,4]] mod 5;
[ [ 1, 2 ], [ 3, 4 ] ]


4.  Is there any reason SubdirectProduct is called that instead of
PullBack?  It seems to me the name is wrong or at least misleading.  I
would have thought a SubdirectProduct would, for example, take
information such as an nxm matrix of group elements where the list in
the i-th row are elements from the group G_i, and the subdirect
product is the subgroup of the direct product generated by the m
(columns) (g11,g21,...,gn1), ... , (g1m,g2m,...,gnm) in the direct
product G1 x ... Gn.  To ensure it's a subdirect product one would
need that elements in the i-th row generate Gi (but there would be no
reason to ask unless one really needed surjection on the factors).

The definition in GAP corresponds to its main use in the construction of small perfect groups. This definition is equivalent to the standard definition for subdirect products of pairs of groups by Lemma 2.1.2.iii of Holt&Plesken's book, "Perfect Groups." As noted in section 2.1.3 of this book, the general case does not have an easy translation into this pullback framework, but within GAP one can only form subdirect products of two groups, so this issue does not arise.

I have more, but will stop here.

Please do not hesitate to ask more questions! You can write to GAP Forum
with questions that you believe are of general interest, and to GAP
Support ([EMAIL PROTECTED]) with more technical questions.

_______________________________________________
Forum mailing list
[email protected]
http://mail.gap-system.org/mailman/listinfo/forum

Reply via email to