Dear Professor Michel,
thank you for your letter and for understanding my general point on
the discussion.
Let me first explain the state of affairs with the new version of GAP:
I have of course said for a long while that it's release is very close
but this is now really the case, in fact Thomas Breuer and Frank
Celler are just fixing some last known minor bugs and inconsistencies
that were detected in running through all the examples in the manual.
And we hope indeed that within this week GAP 3.2 will now be available
through ftp. This means in particular that no major changes can be
made any more for 3.2.
Let me then come back to the four detailed questions at the end of
your letter of yesterday.
1) adding (or in fact multiplying) the elements of a list by a number
works also for the empty list and returns the empty list. As said,
however, this will not be part of the description in the manual for
the reasons that I explained in my last letter, namely, that this
whole area of interpreting empty lists may at a later stage get
revisited.
2) Thomas Breuer has changed 'TriangulizeMat' and 'BaseMat' to work
also for empty lists.
3) However, 'IsVector([])' will still return 'false' for the reasons
explained in Martin's letter. The problem of changing this is a
nontrivial one and just changing this but then not allowing to form
the scalar product of two empty lists which are recognized as legal
vectors might confuse users even more. We certainly will keep this
whole area in mind but I cannot promise that we will come up soon with
a neat solution.
Then to the questions that you asked in today's letter:
1) As you say yourself you can make a function 'IntBool' that allows
you to filter out all rows of a matrix where an entry is a single
nonzero in its column. But indeed, as you say, this will not be highly
efficient. It will probably be much more efficient to write a function
that will run through the matrix finding the columns with only one
nonzero entry. The reason is that these one-line statements using
'Filtered' and 'List' are elegant but tend to use too many function
calls. As you said, function calls to GAP functions are costly, but
even if there was an internal function 'IntBool' doing the boolean to
integer conversion, the overhead created by 'Filtered', 'List' and
'Sum' would probably outweight this advantage.
2) At present we certainly are not installing such a function
'IntBool' to the kernel and generally speaking we hesitate to extend
the kernel unless a proven reasonable gain in efficiency forces us to
do that.
3) The question of providing means of linking functions written in C
to GAP as well as the question of a compiler for GAP have certainly
been discussed here and are on the list of "dreams" for GAP. In fact
with respect to a compiler even some first experiments have been
started by a student. The linking of C functions has been discussed
also with groups outside Aachen and if there are very definite
proposals that people might have we certainly like to know them.
However, both areas are nontrivial tasks and I wouldn't want to commit
myself or anybody else to promise anything along these lines in the
nearer future.
With kind regards
Joachim Neubueser