GAP
позволяет не только производить вычисления в
интерактивном режиме, но и сохранять программы
для дальнейшего их применения. Файлы с
программами, которые должны иметь расширение
"g", создаются и редактируются с помощью
любого текстового редактора.
Как правило, программа состоит из главной части
и набора функций. При чтении программы (с помощью
команды Read) команды, содержащиеся в главной части
выполняются непосредственно, а функции только
лишь определяются, и деляют возможным
последующее обращение к ним.
При разработке программ в MS Windows удобно
одновременно запускать:
- GAP;
- текстовый редактор, в котором открыта
разрабатываемая программа;
- средство просмотра html-файлов (например, Internet
Explorer или Netscape Navigator) для чтения описания GAP в
гипертекстовом формате (начальный файл —
GAP\HTM\Chapters.html).
Кроме того, набор программ удобно осуществлять
на базе файла протокола, создаваемого с помощью
команды LogTo("file.log");.
Пример: составить программу,
которая определяет, является ли группа G
конечной р-группой для некоторого р, и
возвращает список, первый элемент которого - true
или false в зависимости от результата проверки, а
второй - соответствующее значение р, если G
— p-группа, и false — иначе.
1. Создаем с помощью текстового
редактора файл "prog.g" следующего содержания:
> Print(" Loading IsFinitePGroup()", "\n");
IsFinitePGroup:=function(G)
local divisors; # список простых делителей
if IsFinite(G)=false then
return [false, false];
else
d i vi sors:=Set(Factors(Size(G)));
if Length(divisors)=1 then
return [true, d ivisors[1] ];
else
return [false, false];
fi;
fi;
end;;
2. Сохраняем этот файл в каталоге,
выбранном с учетом рекомендаций параграфа 1.2.
3. Запустим GAP и определим файл
протокола log.txt:
> gap> LogTo("log.txt");
Теперь зададим группу диэдра порядка 8:
gap> G:=DihedralGroup(8);
Group( (1,2,3,4), (2,4) )
Попробуем обратиться к функции из файла prog.g:
gap> IsFinitePGroup(G);
Error, Variable: 'IsFinitePGroup' must have a value
Ошибка вызвана тем, что для использования
функции этот файл сначала необходимо прочитать.
При этом, если он содержит синтаксические ошибки,
то будут выданы сообщения о них. Чтение
производится командой Read:
gap> Read("prog.g");
Loading IsFinitePGroup()
Ошибки обнаружены не были. Было выдано
сообщение, включенное для удобства в файл prog.g.
Теперь проверим работу программы для группы
диэдра порядка 8, а также для симметрической
группы S8.
gap> IsFinitePGroup(G);
[ true, 2 ]
> gap> H:=SymmetricGroup(8);
> >Group( (1,8), (2,8), (3,8), (4,8), (5,8), (6,8), (7,8) )
gap> IsFinitePGroup(H);
[ false, false ]
Очевидно, что программа работает корректно.
|