Ще декілька об’єктів GAP
Last updated on 2026-04-27 | Edit this page
Estimated time: 20 minutes
Overview
Questions
- Подальші приклади об’єктів і операцій з ними
Objectives
- Перегляньте приклади типів, які вбудовані в GAP, але можуть бути відсутні в інших системах
- Подивіться приклади арифметики списку
Наразі ми познайомилися з трьома типами GAP:
такі прості об’єкти, як цілі числа, раціональні числа, булеві значення, перестановки;
такі складені об’єкти, як lists;
такі об’єкти з більш складним внутрішнім представленням, як групи.
У цьому розділі ми продемонструємо деякі інші приклади базових об’єктів, які існують у GAP (система розширювана, тому можна вводити нові типи об’єктів, але це виходить за рамки цього уроку!).
Деякі інші прості об’єкти - це floats, cyclotomics and finite field elements:
OUTPUT
1.15
0.000356423
OUTPUT
E(4)
-1
-E(3)^2
OUTPUT
[ 0*Z(2), Z(2)^0 ]
Z(5)
Z(5)^0
Ви вже знаєте про списки. Іншим типом складених об’єктів є
записи. У той час як список містить субоб’єкти,
проіндексовані за їх позиціями в списку, запис містить субоб’єкти, які
називаються компонентами запису, які індексуються за своїми
іменами. Elements of a record are accessed with .
OUTPUT
rec( day := 17, month := "Nov", year := 2015 )
OUTPUT
2015
OUTPUT
rec( hour := 14, minute := 55, second := 12 )
OUTPUT
rec( day := 17, month := "Nov",
time := rec( hour := 14, minute := 55, second := 12 ), year := 2015 )
OUTPUT
[ "time", "year", "month", "day" ]
Далі є рядки та символи. Хоча GAP спеціально друкує рядки, насправді рядок — це лише список символів, і будь-яка функція, яка приймає список, також прийматиме рядок. Навпаки, символи є простими об’єктами, такими як цілі числа.
OUTPUT
"supercalifragilisticexpialidocious"
34
Рядки позначаються подвійними лапками, а символи одинарними.
OUTPUT
false
true
true
true
true
Зауважте, що
OUTPUT
fail
10
Будьте обережні! Деякі операції можуть створити новий список, тоді як інші є деструктивними. Наприклад:
OUTPUT
"aaacccdeefgiiiiiiillloopprrssstuux"
"supercalifragilisticexpialidocious"
але
OUTPUT
"aaacccdeefgiiiiiiillloopprrssstuux"
Яка літера зустрічається у “supercalifragilisticexpialidocious” найчастіше?
OUTPUT
[ [ 'a', 3 ], [ 'c', 3 ], [ 'd', 1 ], [ 'e', 2 ], [ 'f', 1 ], [ 'g', 1 ],
[ 'i', 7 ], [ 'l', 3 ], [ 'o', 2 ], [ 'p', 2 ], [ 'r', 2 ], [ 's', 3 ],
[ 't', 1 ], [ 'u', 2 ], [ 'x', 1 ] ]
OUTPUT
7
[ [ 'i', 7 ] ]
Пошук найпоширеніших букв у списку за допомогою лише одного проходу
Команда
k := Maximum( List( c, v -> v[2] ) ); Filtered( c, v -> v[2] = 7 );
двічі перебирає список c (у List і
Filtered), а також перебирає інший список такої ж довжини,
що й c у виклику Maximum. Якщо список довгий,
це призведе до певного зниження продуктивності та пам’яті. Спробуйте
написати код, який знаходить літери, які найчастіше трапляються в
c, не створюючи проміжного списку.
- GAP має безліч різноманітних безпосередніх, позиційних і складових об’єктів.
- Арифметика списків є дуже гнучкою та потужною.
- Такі об’єкти, як списки та записи, підходять для зберігання структурованих і пов’язаних даних.