Вот простой эфемерный (я его не делал) примерчик. Допустим, мы пишем игрушку-аркаду на тему колобка в лабиринте. Игровая карта представляет собой матрицу 20х30 квадратных полей. Каждое поле может иметь одно из трёх значений: "Стена", "Пустое свободное пространство" и "Свободное пространство с артефактом". Более менее сурьёзная игрушка должна иметь несколько уровней. Уровни отличаются друг от друга только игровой картой. Если бы были возможны конструкторы множеств, то я бы написал:## Код:
```
TYPE Map* = ARRAY 30, 20 OF BYTE; (* 0: wall; 1: empty; 2: artefact *)
CONST
  Level1*:Map = ((0, 0, 0, 1, 1, 1, 0, ...1),
                         ................................
                         (0, 0, 1, 3, 1, 0, 0, ...0));
  Level2* ..... (* и так далее, все 10 уровней *)
```
Отметим наглядность кода (особенно в случае использования моноширинного шрифта) и лаконичность. Игровую карту можно буквально лицезреть в коде. А как удобно её создавать.
А во что это превращается в оберонах?

PS Не  смотря ни на что, я выбираю КП (т. е. один из оберонов)