Приклад 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 |


