> -- Galkov писал(а):
> Функционально правильно сделанно у Алексея, но ведь логические операции-то ленивые!!! Это не просто УЖОС, это УЖОС в квадрате
Я кстати, не понял причины почему нет XOR'а в операциях над множеством ну и для логических выражений. Нет, я понимаю что эту операцию можно выразить через другие, однако машина обычно XOR умеет на прямую, а компилятору нужно быть ну очень умным (и оптимизирующим) чтобы в этой вот белиберде что я нарисовал в условии IF'a распознать XOR и при кодогенерации воткнуть туда именно его. По моему, это уже избыточный минимализм.

Как я понимаю, для этой (да и многих других задач) было бы полезно иметь возможность выбирать подмножество данного множества и в дальнейшем с ним работать. Скажем функция SUBSET куда передается множество, и границы подмножества (например SUBSET({1},1,1) = {0} ).

Тогда, если добавить недостающий XOR, код свелся бы к такому:
## Код:
```
PROCEDURE JustDoIt (i:LONGINT) : LONGINT;
VAR
    j : SET;
BEGIN
    j := SYSTEM.VAL(SET, i);
    j := (SUBSET(j,0,0) XOR SUBSET(j,1,1))*{0} + (j - {0});
    RETURN SYSTEM.VAL(LONGINT, j);
END JustDoIt;
```
