Приклад 1:

gap>2*2;; #два знаку ";" пригнічують вивід на екран
gap>2*2+9=fibonacci(7) and Fibonacci(13) in Prime;
true

Слід розрізняти глобальні і локальні змінні, відмінності яких можна бачити з наступного прикладу:

Приклад 2:

g := 0; # глобальна змінна g
x := function ( а, b, з )
local у;
g := з; # з - аргумент функції x
у := function ( у )
local d, e, f;
d := у; # у - аргумент функції у
e := b; # b - аргумент функції x
f := g; # g - глобальна змінна g
return d + e + f;
end;
return у(a); # у-локальная змінна функції x
end;

2.5 Звернення до функцій

Формат:

function-var()
function-var( arg-expr {, arg-expr} )

Приклад 1:

gap> Fibonacci( 11 );
# звернення до функції "
Fibonacci" з аргументом 11
89

Приклад 2:
gap> Rightcosets( G, Intersection( U, V ));
#обращеніє до операції "Rightcosets",
#в якому другий аргумент визначається
#обращенієм до іншої функції


2.6 Порівняння виразів

Формат:

left-expr = right-expr
left-expr <> right-expr
left-expr < right-expr
left-expr > right-expr
left-expr <= right-expr
left-expr >= right-expr

Оператори = і <> перевіряють відповідно рівність і нерівність, повертаючи true або false. Відмітьте, що з їх допомогою можна порівнювати будь-які об'єкти, тобто при використанні = і <> ніколи не буде отримане повідомлення про помилку. Для кожного типу об'єктів визначення рівності може відрізнятися і описано у відповідному розділі довідкового керівництва. Об'єкти, що відносяться до різних сімейств (families) завжди різні, тобто = приведе до false, і <> - до true. Крім того, в деяких випадках для них може бути визначене відношення "менше".

Оператори порівняння мають більший пріоритет в порівнянні з логічними операторами, але менший в порівнянні з арифметичними. Наприклад, a*b = з and d інтерпретується як ((a*b)=c) and d) . Ще один приклад (порівняння, ліва частина якого є виразом ):

gap> 2 * 2 + 9 = Fibonacci(7);
true

2.7 Арифметичні оператори

Формат:

+ right-expr
- right-expr
left-expr + right-expr
left-expr - right-expr
left-expr * right-expr
left-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

Арифметичні оператори мають найвищий пріоритет в порівнянні з операторами порівняння і логічними операторами.

2.8 Привласнення

Командами в GAP називаються: привласнення, виклики процедур, структури if, while, repeat, for, а також команда return. Всі команди закінчуються крапкою з комою ";".

Привласнення мають формат

var := expr;

Приклад:

gap> data:= rec( numbers:= [ 1, 2, 3 ] );
rec( numbers := [ 1, 2, 3 ] )
gap> data.string:= "string";; data;
rec( numbers := [ 1, 2, 3 ], string := "string" )
gap> data.numbers[2]:= 4;; data;
rec( numbers := [ 1, 4, 3 ], string := "string" )

2.9 Виклик процедури

Формат:

procedure-var();
procedure-var( arg-expr {, arg-expr} );

Відмінність між процедурами і функціями введена для зручності, GAP же їх не розрізняє. Функція повертає значення, але не справляє побічних вражень. Процедура не повертає ніякого значення, але проводить яку-небудь дію (наприклад, процедури Print, Append, Sort).

2.10 Команда IF

Формат:

if bool-expr1 then statements1
{ elif bool-expr2 then statements2 }
[ else statements3 ]
fi;

При цьому частин elif може бути довільна кількість або жодній. Частина else також може бути відсутньою.

Приклад 1: у командах

if expr1 then
if expr2 then stats1
else stats2 fi;
fi;

else відноситься до другого if, тоді як в командах

if expr1 then
if expr2 then stats1 fi;
else stats2
fi;

else відноситься до першого if.

Приклад 2:

gap> i := 10;;
gap> if 0 < i then
> s := 1;
> elif i < 0 then
> s := -1;
> else
> s := 0;
> fi;
gap> s;
1 # знак i

2.11 Цикл WHILE

Формат:

while bool-expr do statements od;

Послідовність команд statements виконується, поки істинна умова bool-expr. При цьому спочатку перевіряється умова, а потім, якщо воно істинне, виконуються команди. Якщо вже при першому зверненні умова помилкова, то послідовність команд statements не виконається жодного разу.

Приклад:

gap> i := 0;; s := 0;;
gap> while s <= 200 do
> i := i + 1; s := s + i^2;
> od;
gap> s;
204

2.12 Цикл REPEAT

Формат:

repeat statements until bool-expr;

Послідовність команд statements виконується, поки істинна умова bool-expr. При цьому спочатку виконуються команди, а потім перевіряється умова. Таким чином, при будь-якому початковому значенні умови набір команд statements виконається, принаймні, один раз.

Приклад (обчислення найменшої суми квадратів перших n послідовних натуральних чисел, що перевищує 200):

gap> i := 0;; s := 0;;
gap> repeat
> i := i + 1; s := s + i^2;
> until s > 200;
gap> s;
204

2.13 Цикл FOR

Формати:

for simple-var in list-expr do statements od;
for variable in iterator do statements od;
for variable in object do statements od;

У першому варіанті послідовність команд statements виконується для кожного елементу із списку list-expr. Цикл for еквівалентний циклу while:

loop-list := list;
loop-index:= 1;
while loop-index <= Length(loop-list) do
variable := loop-list[loop-index];
...
statements
...
loop-index := loop-index+1;
od;

Список list часто є послідовністю. Команда

for variable in [from..to] do statements od;

відповідає поширеній в інших мовах команді

for variable from from to to do statements od;

Приклад:

gap> s := 0;;
gap> for i in [1..100] do
> s := s + i;
> od;
gap> s;
5050

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16