Язык:
Русский
English
set (зарезервированное слово)
Объявление множества (набора).
Синтаксис
set of тип
Замечания
Исходный тип набора должен быть порядковым с не более, чем 256 возможными значениями.
Порядковые значения верхнего и нижнего пределов исходного типа должны быть в диапазоне от 0 до 255.
Значение множества можно задать с помощью конструктора множества, записав выражения в скобках. Каждое выражение обозначает значение множества.
Запись [] обозначает пустое множество, которое является совместимым со всеми типами множеств.
Пример
{ Типы наборов }
type
Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
CharSet = set of Char;
DigitSet = set of 0 .. 9;
Days = set of Day;
{ Конструкторы множеств }
['0' .. '9', 'A' .. 'Z', 'a' .. 'z', '_']
[1, 5, 7 .. 8]
[Mon .. Fri]
Ада
Специального синтаксиса у множеств в языке Ада нет. Множество может быть реализовано либо как массив логических значений, либо как контейнер из обобщённого пакета Ada.Containers.Sets. Если количество возможных значений невелико, предпочтительнее массив. Если же множество подразумевает хранение сложных объектов, например, строк, следует использовать контейнер. Ни в том, ни в другом случае нет ограничения на количество элементов исходного типа множества, кроме ограничений по памяти. В Borland Pascal множество может использовать ровно один бит для хранения информации о принадлежности каждого элемента. Чтобы добиться этого эффекта в языке Ада, используйте прагму Pack.
Пример на языке Ада
-- Типы наборов
type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
type Char_Set is array (Character) of Boolean;
type Digit_Set is array (0 .. 9) of Boolean;
type Days is array (Day) of Boolean;
pragma Pack (Char_Set);
pragma Pack (Digit_Set);
pragma Pack (Days);
-- Конструкторы множеств
('0' .. '9' | 'A' .. 'Z' | 'a' .. 'z' | '_' => True, others => False)
(1 | 5 | 7 .. 8 => True, others => False)
(Mon .. Fri => Frue, others => False)
В качестве типа набора символов рекомендуется использовать типы из пакета Ada.Strings.Maps. Среди них есть в том числе Character_Ranges, компактно представляющий большинство наборов символов, используемых на практике. Особенно компактность заметна, если символы из диапазона Юникод (пакет Аda.Strings.Wide_Maps).