Аналогічним чином визначаються змінні last2 і last3.
3.3 Функції
GAP містить більше 4000 стандартних функцій. Приклад звернення до декількох з них приведений нижче:
Приклад 1:
gap> Factorial(17);
gap> Gcd(1234, 5678);
2
gap> Print(1234, "\n");
1234
Крім того, користувач може вводити власні функції. Найпростіше це робиться так:
Приклад 2:
gap> cubed:= x -> x^3;
function ( x ) ... end
gap> cubed(5);
125
Інший спосіб визначення функцій і процедур викладений в пп. 2.14 і 3.12.
Рекомендації по розробці програм на мові GAP містяться в додатку А.
3.4 Списки
Список є укладеним в квадратні дужки набором об'єктів, розділених комами. Наприклад, список з перших десяти простих чисел можна задати таким чином:
gap> primes:=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29];
[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]
Потім до нього можна додати наступні два прості числа:
gap> Append(primes [31, 37]);
gap> primes;
[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37 ]
Якщо додається тільки один елемент, це можна зробити і по-іншому:
gap> Add(primes, 41);
gap> primes;
[ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41 ]
Вказати окремий елемент списку можна по його номеру в списку:
gap> primes[7];
17
Цей же механізм дозволяє привласнити значення існуючому або новому елементу списку (функція Length визначає довжину списку):
gap> Length(primes);
13
gap> primes[14]:= 43;
43
gap> primes;
[ 2, 3, 5, 7,11,13,17,19,23,29,31,37,41,43 ]
При цьому значення не обов'язково повинне привласнюватися наступному елементу списку. Наприклад, якщо двадцятим простим числом є 71, ми можемо відразу привласнити значення 71 двадцятому елементу списку primes, пропускаючи бракуючі елементи. Отриманий список матиме довжину 20:
gap> primes[20]:= 71;
71
gap> primes;
[ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,,,,,, 71 ]
gap> Length(primes);
20
Список має бути створений перед завданням його елементу (наприклад, бути порожнім списком [ ]):
gap> lll[1]:= 2;
Error, Variable: 'lll' must have а value
gap> lll:= [];;
gap> lll[1]:= 2;
2
Функція Position повертає номер першого елементу списку, що має задане значення. Якщо в списку немає елементу із заданим значенням, функція повертає false:
gap> Position(primes, 17);
7
gap> Position(primes, 20);
false
Відмітимо, що при всіх приведених вище змінах списку primes довжина списку змінювалася автоматично.
Функція Isbound для списків показує, чи містить список елемент із заданим номером (для запісейн чи містить запис вказане поле):
gap> k:= [, 2, 3,, 5,, 7,,,, 11 ];;
gap> Isbound(до[7]); Isbound(до[4]); Isbound(до[20]);
true
false
false
Список може складатися з об'єктів різних типів, наприклад:
gap> lll:= [true, "This is а String",,, 3];
[ true, "This is а String",,, 3 ]
Далі, список може бути частиною іншого списку або самого себе:
gap> lll[3]:= [4,5,6];; lll;
[ true, "This is а String", [ 4, 5, 6 ],, 3 ]
gap> lll[4]:= lll;
[ true, "This is а String" [ 4, 5, 6 ] ~, 3 ]
Тут знак " ~ " у четвертій позиції позначає об'єкт, виведення якого на екран (друк) проводиться в даний момент.
Рядки є окремим випадком списків, і друкуються без роздільників. Приклади завдання рядків і операцій над ними:
gap>s1:=['H','a','l','l','o','','w','o','r','l','d''.'];
"Hallo world."
gap> s2 := "Hello world.";
"Hello world."
gap> s1 = s2;
true
gap> s2[7];
'w'
Витягання і зміну підмножин списку проводить оператор { }:
gap> sl := lll{ [ 1, 2, 3 ] };
[ true, "This is а String" [ 4, 5, 6 ] ]
gap> sl{ [ 2, 3 ] }:= [ "New String", false ];
[ "New String", false ]
gap> sl;
[ true, "New String", false ]
3.5 Тотожність і рівність списків
Для вивчення способів управління складними структурами даних в GAP важливо розуміти відмінності між тотожними і рівними об'єктами. У даному розділі ця відмінність демонструється на прикладі списків. Аналогічні приклади можуть бути підібрані і для записів.
Два списки рівні (тобто оператор порівняння = повертає true) тоді і тільки тоді, коли вони мають однакову довжину і їх відповідні елементи рівні.
Приклад:
gap> numbers:= primes;
[ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,,,,,,71 ]
gap> numbers = primes;
true
Тепер змінимо список numbers і знову порівняємо його з primes .
gap> primes[3]:= 4;
4
gap> numbers = primes;
true
Виявляється, що списки numbers і primes знову рівні, а роздрукувавши список primes, ми побачимо, що primes[3]=4. Це пояснюється тим, що списки primes і numbers не тільки рівні, але і ідентичні. Ідентифікатори primes і numbers указують на один і той же список, і зміни в нім відбуваються при вказівці будь-якого з його імен. Привласнення numbers:= primes створює не новий список, а тільки нове ім'я для вже існуючого списку.
Якщо необхідно змінити список, співпадаючий за змістом з primes, так, щоб сам список primes при цьому не змінився, необхідно створити копію списку primes за допомогою функції Shallowcopy (у наступному прикладі заздалегідь відновимо старе значення primes)
gap> primes[3]:= 5;
5
gap> primes;
[ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,,,,,,71 ]
gap> numbers:= Shallowcopy(primes);
[ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,,,,,,71 ]
gap> numbers = primes;
true
gap> numbers[3]:= 4;
4
gap> numbers = primes;
false
Примітка. Єдиними об'єктами, які можуть бути змінені у такий спосіб, є списки і записи, оскільки тільки ці об'єкти в GAP можуть складатися з інших об'єктів. Наприклад, після виконання наступних команд значення i і j відповідно дорівнюватимуть 2 і 1:
gap> i:= 1;; j:= i;; i:= i+1;;
Вправа. Пояснити, що відбувається в результаті виконання команд:
gap> l:= [];
[ ]
gap> l:= [l];
[ [ ] ]
gap> l[1]:= l;
3.6 Множини
Множинами в GAP називаються списки спеціального вигляду. Елементи множини розташовані послідовно (тобто не содржат пропусків, як, наприклад, список [2,3,5,,,,,,,,31,37,41]), впорядковані (порядок сортування GAP визначає самостійно) і зустрічаються в списку тільки один раз. Множини, як і списки, можуть містити об'єкти різних типів.
Перевірити, чи є об'єкт множиною, можна за допомогою функції Isset. Для кожного списку існує відповідна йому множина, що отримується за допомогою функції Set.
Приклад:
gap> fruits:=["apple", "strawberry", "cherry", "plum", "apple"];;
gap> Isset(fruits);
false
gap> fruits:= Set(fruits);
[ "apple", "cherry", "plum", "strawberry" ]
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |


