Загальний
-
Для першого уроку добре мати доступ до Windows (VM або віддаленого робочого столу), щоб продемонструвати деякі специфічні для Windows аспекти роботи з GAP.
-
Перед початком перевірте, чи всі встановили GAP і знають, як його запустити. Також нагадайте, що не рекомендується встановлювати в шляху з пробілами, напр. в “Мої документи”.
-
Важливо, щоб студенти зрозуміли, як працювати з файлами, розташованими в різних каталогах.
ChangeDirectoryCurrent
— це функція з пакета IO (вимагає обчислення), яка має бути доступною, якщо GAP встановлено належним чином (тобто встановлено згідно з інструкціями для семінару). У разі будь-яких проблем першим кроком усунення несправностей є перевірка того, чиLoadPackage("io");
повертаєfail
. Якщо так, виправленням для користувачів Windows є введення повних шляхів до файлів. Користувачі Linux і OS X постраждали менше, тому що GAP потрібно запускати шляхом переходу до потрібного каталогу в терміналі та запуску GAP звідти. -
Допоможіть налаштувати параметри терміналу, особливо покажіть користувачам Windows, що вони можуть постійно змінювати кольори та шрифти в м’якій оболонці (той, що починається з
gap.bat
). -
Поясніть, як копіювати та вставляти введення та виведення (особливо у Windows).
-
Поясніть, як читати сторінки уроку: введення GAP – це типи без підказки GAP. Вивід GAP має іонно-синій колір. Помилки відображаються червоним кольором. Підказки GAP не відображаються, окрім випадків, коли це справді необхідно (наприклад, щоб продемонструвати, як працює багаторядковий ввід).
-
Важливо, щоб інструктор починав GAP з параметра
-r
, щоб уникнути втручання у власні налаштування GAP, напр. локально встановлені пакунки та інший вміст каталогу.gap
. -
Щоб використовувати колірну підказку, коли GAP запускається з опцією
-r
, щоб ігнорувати всі параметри користувача, включаючи це (якщо встановлено), викличтеColorPrompt(true);
.
Перша сесія з GAP
-
Підкресліть, що банер містить інформацію про версію, корисну для цитування GAP або повідомлення про помилки. Вибір пакетів може відрізнятися, але відсутність пакетів IO і Browse означає, що ці та, можливо, деякі інші пакети, які потребують компіляції, не були скомпільовані.
-
Другий виклик
LogTo("logfile");
не відкриє новий файл, але повідомить, що GAP вже веде журнал до іншого файлу. У цьому випадку або проігноруйте його, якщо ви хочете продовжити ведення журналу, який уже використовується, або викличтеLogTo();
, щоб закрити поточний файл журналу, а потім викличтеLogTo
з аргументом, щоб почати запис в новому файлі. -
Показуючи приклад помилки з
факторіалом
, згадайте, що така помилка також трапляється, якщо, наприклад, для визначення функції потрібно прочитати якийсь файл або завантажити якийсь пакет.
Обговоріть, чому використання посібника GAP у Google є поганою практикою замість використання довідкової системи GAP.
-
Майте на увазі, що екран вибору довідки виглядатиме інакше, якщо пакет Огляд не скомпільовано.
-
Поясніть, як перейти до перегляду HTML-версії посібника з підтримкою MathJax.
-
Дайте підказку, що на карті сайту на веб-сайті GAP показано Пошук на веб-сайті GAP, яка дозволяє виконувати певні пошукові запити.
-
Зверніть увагу на різницю між
AsList
іAsSSortedList
. -
Допоможе викликати
WriteGapIniFile
і налаштувати GAP, наприклад, використовуючи браузер як засіб перегляду. -
Демонстрація друку
Sum( List( elts, Order ) ) / Length( elts );
покажіть, як зібрати цю команду за допомогою редагування командного рядка та переміщення по рядку, можливо, виконавши часткову команду, щоб побачити їхні результати, замість того, щоб вводити всю команду послідовно від першого до останнього символу. -
Використовуйте Etherpad для голосування за підходи до обчислення середнього порядку списку. Після цього обговоріть ситуації, коли кожен з них може бути кращим за інші.
- Рішення виклику:
Filtered( elts, g -> 2^g = 2 );
andFiltered( elts, g -> (1,2)^g = (1,2) );
.
Ще декілька об’єктів GAP
-
Число з плаваючою комою, цикломатичні числа, елементи скінченних полів далі в уроці не використовуються, але ми згадуємо їх коротко, щоб показати, що вони існують.
-
Підкресліть, що організація складних об’єктів у вкладені записи може бути більш ефективною, ніж вкладені списки.
-
Стережіться цього
w:="supercalifragilisticexpialidocious"; IsSubset(w,'s');
призводить до помилки методу не знайдено. Це може бути вдалим моментом для представлення цього особливого виду повідомлень про помилки. -
Щоб розширити GAP за допомогою нових типів об’єктів, зверніться до Створення нових об’єктів та Приклади розширення системи з довідкового посібника GAP. Також пакет Circle надає приклад розширення GAP новими мультиплікативними об’єктами.
- Розв’язання завдання:
r:=c[1]; for i in [2..Length(c)] do if c[i][2]>r[2] then r:=c[i]; fi; od; r;
Функції в GAP
-
Приділіть деякий час структурі функції GAP: ключові слова
function
,local
,return
,end
та інші мовні конструкції, представлені там. -
Розкажіть, як досліджувати цикл розриву, показуючи приклад повідомлення про помилку.
Використання регресійних тестів
-
Студентам може знадобитися допомога з форматуванням тесту через недоречні коментарі та/або інше форматування вихідних даних.
-
Розглянемо аспекти створення тестових файлів, які можна відтворити: випадкові чи явні приклади, коментування виводу за допомогою подвійної крапки з комою тощо.
-
Зверніться до інших параметрів
Тесту
, таких як порівняння результату з пробілами, відображення прогресу тесту тощо. -
Згадайте функцію
TestDirectory
, щоб запустити колекцію тестів. -
Згадайте інструменти профілювання та покриття коду.
Пошук малими групами
- Дайте огляд
SmallGroup
,AllSmallGroups
,NrSmallGroups
таSmallGroupsInformation
з деякими прикладами.
Обговоріть, чому ітерація краща, ніж AllSmallGroups, що виснажує пам’ять (згадайте концепцію об’єктів, що самонавчаються).
-
Побічне питання полягає в тому, як перетворити pc групу, повернуту
SmallGroup
, на інше представлення, наприклад. перестановка або fp група. -
Програмування на льоту є кращим способом навчання, яке розвиває більшість функцій з цього уроку.
- Розв’язання завдання:
Sum(List(Filtered([1..2000], n -> not IsPrimePowerInt(n)),NrSmallGroups)); NrSmallGroups(1536); last2-last;
. In addition toSmallGroup(105,1)
таSmallGroup(357,1)
, інша група єSmallGroup(1785,1)
.
Атрибути та методи
- Чому не варто оголошувати
Random
як атрибут?
- Ідеї для завдання: спробуйте
k:=1
, а потімk:=k+1;n:=2^k;AvgOrdOfCollection(DihedralGroup(n));time;AvgOrdOfGroup(DihedralGroup(n));time;
. Навіть дляk=20
перша функція займає приблизно 15 секунд, а друга – приблизно 115 секунд на MacBook Pro.