GAP воспринимает следующие символы: цифры,
буквы (верхний и нижний регистры), пробел, символы
табуляции и новой строки, а также специальные
символы:
" |
' |
( |
) |
* |
+ |
, |
- |
. |
/ |
: |
; |
< |
= |
> |
~ |
{ |
\ |
] |
^ |
_ |
{ |
} |
# |
Составленные из символов слова относятся к
следующим категориям:
- ключевые слова (зарезервированные
последовательности букв нижнего регистра)
- идентификаторы (последовательности цифр и
букв, содержащая не менее одной буквы и не
являющаяся ключевым словом)
- строки (последовательности произвольных
символов, заключенная в двойные кавычки)
- целые числа (последовательности цифр)
- операторы и ограничители в соответствии
со следующим списком:
|
+ |
- |
* |
/ |
^ |
~ |
|
= |
<> |
< |
<= |
> |
>= |
|
:= |
. |
. . |
-> |
, |
; |
|
[ |
] |
{ |
} |
( |
) |
Следует заметить, что пробелы могут быть
использованы для повышения удобочитаемости
текста, так как любая последовательность
пробелов воспринимается GAP как один пробел. Таким
образом, команда
if i<0 then a:=-i;else a:=i;fi;
может быть записана следующим образом:
if i < 0 then
# если i отрицательное
a := -i;
else
# иначе
a := i;
fi;
Ключевыми словами GAP являются следующие слова:
|
and |
do |
elif |
else |
end |
fi |
|
for |
function |
if |
in |
local |
mod |
|
not |
od |
or |
repeat |
return |
then |
|
until |
while |
quit |
|
|
|
Идентификаторы состоят из букв, цифр,
символов «_», и должны содержать не менее одной
буквы или символа «_». При этом регистр является
существенным. Примеры идентификаторов:
|
a |
foo |
LongIdentifier |
|
hello |
Hello |
HELLO |
|
x100 |
100x |
_100 |
|
underscores_case |
MixedCase |
|
Примерами выражений являются: переменные,
обращения к функциям, целые числа, перестановки,
строки, функции, списки, записи. С помощью
операторов из них могут быть составлены более
сложные выражения. Операторы разбиты на три
класса:
- операторы сравнения:
= <> <= in
- арифметические операторы:
+ - * /
mod ^
- логические операторы:
not and or
Пример 1:
gap>2*2;; #два знака ";" подавляют вывод на
экран
gap>2*2+9=Fibonacci(7) and Fibonacci(13) in Prime;
true
Следует различать глобальные и локальные
переменные, различия которых можно видеть из
следующего примера:
Пример 2:
g := 0;
# глобальная переменная g
x := function ( a, b, c )
local y;
g := c; # c - аргумент
функции x
y := function ( y )
local d, e, f;
d := y; # y - аргумент
функции y
e := b; # b - аргумент
функции x
f := g; # g - глобальная
переменная g
return d + e + f;
end;
return y(a); # y-локальная переменная
функции x
end;
Формат:
function-var()
function-var( arg-expr {, arg-expr} )
Пример:
gap> Fibonacci( 11 );
# обращение к функции "Fibonacci" с
аргументом 11
89
gap> G.operations.RightCosets(G,Intersection(U,V));;
#обращение к функции
"G.operations.RightCosets",
#в котором второй аргумент
определяется
#обращением к другой функции
Формат:
left-expr = right-expr
left-expr <> right-expr
Примечание: любые объекты сравнимы между
собой. Объекты различных типов всегда различны,
т.е. = приведет к false, и <> — к true. Кроме того, для
них определено отношение «меньше».
Операторы сравнения имеют больший приоритет по
сравнению с логическими операторами, но меньший
по сравнению с арифметическими. Например, a*b = c and d
интерпретируется как ((a*b)=c) and d). Еще один пример
(сравнение, левая часть которого является
выражением ):
gap> 2 * 2 + 9 = Fibonacci(7);
true
Формат:
+ right-expr
- right-expr
eft-expr + right-expr
left-expr - right-expr
left-expr * right-expr
eft-expr / right-expr
left-expr mod right-expr
left-expr ^ right-expr
Значение, как правило, зависит от типа
операндов. Mod определен только для целых и
рациональных чисел. Для элемента группы ^
означает возведение в степень, если правый
операнд - целое число, а если он — также элемент
группы, то сопряжение с его помощью. Приоритет
операторов (по убыванию):
1) ^
2) унарные + и -
3) *, /, mod
4) + и -
Пример: -2 ^ -2 * 3 + 1 означает (-(2 ^
(-2)) * 3) + 1 .
Арифметические операторы имеют наивысший
приоритет по сравнению с операторами сравнения и
логическими операторами.
|