538
ГЛАВА 9. СТРУКТУРЫ ДАННЫХ
ем изображений пустого множества (иногда и полного) литеральные изобра-
жения множеств невозможны, когда литеральные изображения для значений
базового типа не предусмотрены.
Некоторые из перечисленных операций требуют более одной команды,
но, тем не менее, остаются простыми для реализации. В ряде случаев могут
потребоваться специальные константные шкалы, определяемые статически.
Почему в
С/С++
этого средства в явном виде нет? Ответ: есть побитовые
операции, и поэтому реализовывать то, что можно сделать с их помощью,
сочли уже ненужным.
Случай (IV) может показаться экзотическим, имеющим лишь академиче-
ский интерес. По этой причине его редко можно встретить в практических
языках. Но на самом деле этот случай часто встречается на практике. Напри-
мер, области на рисунке являются множествами точек, а точек слишком мно-
го. Подобные множества приходится моделировать подручными средствами,
а потому не всегда видна их концептуальная природа, что затрудняет пони-
мание программ.
Предикаты, формирующие множества, полезны не только при работе с
потенциально неограниченными множествами. В частности, они расширяют
выразительность оперирования со сложно устроенными множествами. От-
сюда вполне разумно предложить еще одну операцию для множественных
типов данных:
{x ∈ S|P (x)}—формирование множества с помощью предикатного филь-
тра P (x).
Как реализовать эту возможность? Первый приходящий на ум путь: сим-
волические вычисления над множествами.Символическое вычисление пред-
полагают выполнение действий над специально представленными обозначе-
ниями (в данном случае — множеств и их элементов), а не над конкретными
значениями, которые, быть может, и существуют-то только в идеальном ма-
тематическом смысле (π,
√
2 и др.). Их можно трактовать как абстрактно-син-
таксическое представление конкретно-синтаксического представления язы-
ка изображения предикатов.
Язык программирования, в котором можно оперировать с потенциально
бесконечными множествами —
Setl
.
Интересно,что в первых версиях языка,разработанных Дж. Шварцем для
советско-американского проекта, эта возможность не была декларирована.
Она появилась в языке только тогда, когда новосибирскими программиста-
ми было предложено представление бесконечных множеств, т. е. реализация
случая (IV). Реализационная стратегия этого проекта (который уместно на-