Programming with GAP: Обговорення

Десять підказок для початківців GAP

  1. Пам’ятайте, що GAP чутливий до регістру! Це означає, що ABC, Abc і abc є трьома різними ідентифікаторами. Виклик SymmetricGroup(3) працює, але Symmetricgroup(3) призведе до помилки.

  2. Повідомлення про помилку “Error, Variable: 'FuncName' must have a value” під час виклику функції зазвичай вказує на друкарську помилку в назві функції (див. попередню підказку) або на якийсь пакет, який потрібно завантажити заздалегідь за допомогою LoadPackage.

  3. Не соромтеся використовувати довші та більш інформативні назви змінних, де це доцільно. Наприклад, x виглядає ідеально придатним для List([1..10], x -> x^2), тоді як ConClassesReps може бути більш інформативним, ніж просто x для списку представників класів спряженості групи (англ. “Conjugacy Classes Representatives”).

  4. Використовуйте редагування командного рядка: прокручуйте історію команд і переміщайтеся в командному рядку за допомогою клавіш зі стрілками, щоб редагувати його.

  5. Використовуйте автозаповнення замість того, щоб вводити назви функцій і змінних повністю. Введіть початкову частину ідентифікатора, а потім натисніть <Tab>. Він буде доповнений, якщо можливе його унікальне завершення. Якщо ні, ви можете знову натиснути <Tab> щоб переглянути всі можливі пропозиції.

  6. Щоб переглянути сторінки довідки, використовуйте команди ? і ??. Це дозволить шукати не тільки у посібниках GAP, але також у посібниках усіх пакетів GAP, доступних у вашій інсталяції GAP.

  7. Встановіть HTML у якості формату довідки за замовчуванням. Використовуйте SetHelpViewer, щоб переглянути його у бажаному браузері.

  8. Використовуйте **LogTo** щоб зберегти всі введення та виведення GAP у текстовий файл. Його слід викликати перед обчисленнями, а не після!

  9. Якщо обчислення триває надто довго, натисніть <Control>-C, щоб перервати його. Потім введіть quit; щоб вийти з перерваного циклу.

  10. Прочитайте Перша сесія з GAP з Підручнику з GAP.

Написання програм на GAP

Залишайтеся на зв’язку

Внесок у GAP

Поради та підказки

#!/bin/sh

gap -r -b -q avgord.g << EOI
TestOneOrderEasy( $1 );
quit;
EOI

і зробіть його виконуваним за допомогою chmod u+x check-one-order.sh. Тепер ви можете назвати це так:

$ ./check-one-order.sh 24
fail
$ ./check-one-order.sh 105
[ 105, 1 ]

GAP може читати будь-який дійсний ввід GAP із коду за допомогою Read. Вміст буде прочитано та оцінено в основному циклі читання-оцінки-друку, але результати не будуть надруковані. Іноді вам може знадобитися прочитати вміст файлу як функцію та повернути цю функцію - для цієї мети вам може знадобитися ReadAsFunction. Але що робити, якщо у вас є файл даних, що надходить з іншого джерела, і це недійсний ввід GAP? Іноді ви можете керувати інструментом, який експортує дані, і можете налаштувати його для створення вхідного файлу GAP. Але де шукати, якщо цей варіант неможливий?

ReadCSV( filename[, nohead][, separator] ) читає файл у форматі CSV (значення, розділені комами) і повертає його записи як список записів (див. here). Записи першого рядка файлу будуть використані для імен компонентів запису (прогалини будуть перетворені на підкреслення). Можна також вказати, що перший рядок містить дані замість імен полів, а також вказати спеціальний роздільник. Навпаки, PrintCSV може використовуватися для виведення файлів CSV.

Щоб читати довільні (бінарні або текстові) файли як рядки, скористайтеся функцією StringFile, що надається пакетом GAPDoc (see тут). Він поверне вміст файлу у вигляді рядка. Після цього ви можете використовувати різні інструменти для роботи з рядками (див. Рядки та символи у довідковому посібнику GAP) , щоб обробити його потрібним вам способом. Пакет GAPDoc також надає функцію FileString, яка записує вміст рядка у файл.

Якщо вам потрібно організувати читання/запис рядок за рядком, замість читання або запису всього файлу/рядка одночасно, ми пропонуємо переглянути функціональні можливості, які надає пакет IO (див. тут), зокрема, в IO_ReadLine і IO_WriteLine.