GAP позволяет не только производить вычисления в интерактивном режиме, но и сохранять программы для дальнейшего их применения. Программы создаются и сохраняются в формате текстовых файлов (которым обычно присваивают расширение "g"), и редактируются с помощью любого текстового редактора.
Как правило, программа состоит из главной части и набора функций. При чтении программы (с помощью команды Read) команды, содержащиеся в главной части, выполняются непосредственно, а функции только лишь задаются, и делают возможным последующее обращение к ним. В случае синтаксических ошибок при чтении файла с программой будут выданы соответствующие сообщения.
При разработке программ удобно одновременно запускать:
GAP
текстовый редактор, в котором открыта разрабатываемая программа;
средство просмотра HTML-файлов (например, Firefox или Internet Explorer) для чтения описания GAP в гипертекстовом формате (начальный файл - GAP\HTM\Index.htm).
Кроме того, если требуется оформить в виде программы последовательность команд, которая была введена в ходе работы с системой в диалоговом режиме, то это удобно сделать, редактируя файл протокола, который для этого должен быть уже открыт на момент начала ввода этих команд, с помощью команды вида LogTo("file.log");.
Пример: составить программу, которая определяет, является ли группа G конечной p-группой для некоторого p, и возвращает список, первый элемент которого - true или false в зависимости от результата проверки, а второй - соответствующее значение p, если G - p-группа, и false - иначе.
1. Создаем с помощью текстового редактора файл prog.g следующего содержания:
Print(" Loading IsFinitePGroup()", "\n");
IsFinitePGroup:=function(G)
local divisors; # список простых делителей
if IsFinite(G)=false then
return [false, false];
else
divisors:=Set(Factors(Size(G)));
if Length(divisors)=1 then
return [true, divisors[1] ];
else
return [false, false];
fi;
fi;
end;
|
2. Сохраняем этот файл в каталоге, выбранном с учетом рекомендаций пункта 1.3.
3. Запустим GAP и определим файл протокола log.txt:
gap> LogTo("log.txt");
|
Теперь зададим группу диэдра порядка 8:
gap> G:=DihedralGroup(8); <pc group of size 8 with 3 generators> |
Попробуем обратиться к функции из файла prog.g:
gap> IsFinitePGroup(G); Error, Variable: 'IsFinitePGroup' must have a value |
Ошибка вызвана тем, что для использования функции этот файл сначала необходимо прочитать. При этом, если он содержит синтаксические ошибки, то будут выданы сообщения о них. Чтение производится командой Read:
gap> Read("prog.g");
Loading IsFinitePGroup()
|
Ошибки обнаружены не были. Было выдано сообщение, включенное для удобства в файл prog.g.
Теперь проверим работу программы для группы диэдра порядка 8, а также для симметрической группы S_8.
gap> IsFinitePGroup(G); [ true, 2 ] gap> H:=SymmetricGroup(8); Sym( [ 1 .. 8 ] ) gap> IsFinitePGroup(H); [ false, false ] |
Очевидно, что программа работает корректно.
Заметим, что в GAP имеются стандартные функции IsPGroup, определяющая, является ли группа G конечной p-группой для некоторого p, и PrimePGroup, возвращающая соответствующее значение p.
generated by GAPDoc2HTML