Обговорення
Останнє оновлення 2026-06-16 | Редагувати цю сторінку
Десять порад для початківців GAP
Пам’ятайте, що GAP чутливий до регістру! Це означає, що
ABC,Abcтаabcє трьома різними ідентифікаторами. Виклик функціїSymmetricGroup(3)працює, алеSymmetricgroup(3)призведе до помилки.Повідомлення про помилку
“Error, Variable: 'FuncName' must have a value”під час виклику функції зазвичай вказує на друкарську помилку в назві функції (див. попередню пораду) або на якийсь пакет, який потрібно завантажити заздалегідь за допомогоюLoadPackage.Не вагайтеся використовувати довші та більш інформативні назви змінних, де це доцільно. Наприклад,
xвиглядає ідеально придатним дляList([1..10], x -> x^2), аConClassesRepsможе бути більш інформативним, ніж простоxдля списку представників класів спряженості елементів групи (від англ. “Conjugacy Classes Representatives”).Використовуйте редагування командного рядка: переглядайте історію команд та переміщайтеся в командному рядку за допомогою клавіш зі стрілками, щоб редагувати рядок.
Використовуйте автодоповнення замість того, щоб вводити назви функцій і змінних повністю. Введіть початкову частину ідентифікатора, а потім натисніть
<Tab>. Він буде доповнений, якщо можливе його унікальне закінчення. Якщо ні, знову натисніть<Tab>, щоб переглянути всі можливі пропозиції.Щоб переглянути сторінки довідки, використовуйте команди
?і??. Це дозволить шукати не тільки у документації самої системи GAP, але також у документації усіх пакетів, доступних у вашій інсталяції GAP.Встановіть HTML у якості формату довідки за замовчуванням. Використовуйте
SetHelpViewerдля перегляду у бажаному браузері.Використовуйте
LogTo, щоб зберегти всі введення та виведення GAP у текстовий файл. Цю функцію слід викликати перед обчисленнями, а не після!Якщо обчислення триває надто довго, натисніть
<Control>-C, щоб перервати його. Потім введітьquit; щоб повернутись до головної сесії GAP.Прочитайте розділ “A First Session with GAP”, який міститься у GAP Tutorial.
Програмування у GAP
Використовуйте прямі обчислення в командному рядку для дослідження об’єктів і прототипування, а потім подумайте, як упорядкувати свій код для використання у майбутньому.
Використовуйте
LogToдля збереження вводу та виводу у файл журналу, який потім можна редагувати в текстовому редакторі.Зберігайте код у текстових файлах і використовуйте
Readдля їх завантаження. Оберіть якийсь повнофункціональний текстовий редактор для редагування цих файлів.Шляхом створення функцій робіть свій код модульним і придатним для багаторазового використання.
Пишіть коментарі у коді – це допоможе, коли ви повернетеся до нього через деякий час.
Зрозумійте, що робити, коли GAP видає запрошення
brk>: ви можете дослідити змінні у поточному контексті виконання та використатиWhere, щоб побачити останні команди до того, як сталася помилка.Використовуйте механізм налаштувань для налаштування GAP, наприклад, щоб установити перегляд довідки у форматі HTML або зробити історію командного рядка доступною після виходу з GAP під час наступного сеансу GAP.
Зрозумійте теорію, на якій базуються обчислення: теоретичні вдосконалення можуть підвищити продуктивність коду набагато більше, ніж оптимізований код, який все ще виконує обчислення “грубою силою”.
Під час розробки алгоритмів, не забувайте про виключні випадки. Наприклад, чи працює ваш код з тривіальною групою чи одиничним елементом?
Не покладайтеся на те, що функції GAP повертають результати в певному порядку, якщо це незадокументовано. Наприклад, деякі методи не гарантують, що класи спряженості або незвідні характери перераховані в певному порядку. Більш того, перший елемент у їх списку не обовʼязково є класом спряженості одиничного елемента або тривіальним характером.
-
Не намагайтеся обчислити більше інформації, ніж вам потрібно, оскільки це може вплинути на продуктивність. Наприклад:
Якщо властивість є інваріантом класу спряженості (елементів або підгруп), може бути достатньо розглянути лише представників класів спряженості.
Якщо вас цікавить список елементів колекції у довільному порядку, використовуйте
AsListзамістьAsSSortedList.Не обчислюйте класи спряженості всіх підгруп, якщо, наприклад, треба знайти лише нормальні або максимальні підгрупи - для їх обчислення існують спеціальні методи.
Якщо шукаєте p-підгрупи, спочатку ви можете обчислити Силовську p-підгрупу групи, а потім отримати її підгрупи та спряжені з ними.
Представлення має значення: можливо, варто перетворити групу з fp-групи на ізоморфну pc-групу або групу перестановок, щоб використовувати швидші методи.
Перегляньте GAP Frequently Asked Questions, щоб знайти додаткові поради.
Залишайтеся на зв’язку
Підпишіться на GAP Forum.
-
Якщо вам потрібна допомога, виберіть один із цих трьох варіантів, залежно від питання:
задайте запитання в GAP Forum;
надішліть їх до GAP Support;
запитайте їх на Mathematics Q&A site.
Внесок у GAP
Якщо ви вважаєте, що знайшли помилку: будь ласка, опишіть проблему на GitHub або повідомте про це електронною поштою на адресу GAP Support.
Будь ласка, цитуйте GAP, якщо ви його використовуєте. Це сприяє зростанню спільноти, що має позитивний вплив на її учасників. Ця сторінка рекомендує, як цитувати GAP. Також, функція
Citeстворює зразок цитування для тієї самої версії GAP, яка використовується.Розгляньте можливість поділитися своїми розробками у GAP з іншими, від поширення вашого коду доступними засобами до організації його в пакет GAP, який можна запропонувати для розповсюдження разом з GAP у складі його дистрибутива.
Допоможіть подальшому розвитку цього уроку.
Поради та підказки
- Це простий підхід для виклику GAP зі скрипту оболонки. Створіть
скрипт оболонки під назвою
check-one-order.shз таким вмістом:
та зробіть його виконуваним за допомогою
chmod u+x check-one-order.sh. Тепер ви можете викликати цей
скрипт:
ВИВІД
fail
ВИВІД
[ 105, 1 ]
- Читання файлів із даними
GAP може читати будь-який дійсний ввід GAP із файлу за допомогою
Read. Вміст буде прочитано та виконано в контексті головної
сесії GAP, але результати не будуть надруковані. Іноді може знадобитися
прочитати вміст файлу як функцію та повернути цю функцію. Для цієї мети
можна використовувати ReadAsFunction. Але що робити, якщо
треба прочитати деякі дані, що надійшли в іншому форматі з іншого
джерела? Іноді ви можете контролювати формат експорту даних та
налаштувати його для виводу вхідного файлу GAP. Якщо цей варіант
неможливий, то що нам робити?
Функція ReadCSV( filename[, nohead][, separator] ) читає
файл у форматі CSV (значення, розділені комами) і повертає його рядки як
список записів (див. документацію).
Зміст першого рядка файлу буде використано для імен компонентів записів
(пробіли будуть замінені на підкреслення). Можна також вказати, що
перший рядок теж містить дані замість імен полів, а також вказати
спеціальний роздільник. Навпаки, функція PrintCSV може
використовуватися для виведення файлів у CSV форматі.
Щоб читати довільні (бінарні або текстові) файли як рядки,
користуйтеся функцією StringFile, що надається пакетом
GAPDoc (див. документацію).
Ця функція повертає вміст файлу у вигляді рядка. Після цього можна
використовувати різні інструменти для роботи з рядками (див. “Strings and
Characters” у довідковому посібнику GAP) для подальшої роботи з ним.
Пакет GAPDoc також надає функцію FileString, яка записує
вміст рядка у файл.
Якщо потрібно організувати читання/запис рядок за рядком, замість
читання або запису всього файлу/рядка одночасно, розгляньте можливості,
які надає пакет IO (див. документацію),
зокрема, функції IO_ReadLine та
IO_WriteLine.