Возможно реализовать такую вещь, как расширение языка в C ++, но в самом языке это невозможно.
Единственными встроенными типами ограничений являются ограничения в конечной области (неотрицательные целые числа), ограничения в конечных наборах (ограничения в области множеств неотрицательных целых чисел) и ограничения записи.
Возможно, вы можете использовать целочисленные константы для моделирования вашей проблемы, например,
declare
%% 4 constants
Lisa = 1
Ann = 2
Mary = 3
Joanna = 4
%% N will be the constrained variable
N
in
N::[Lisa Ann Mary Joanna]
{Show N} %% displays N{1#4}, i.e. N is between 1 and 4
N \=: Mary %% tell: N is not Mary
{Show N} %% displays N{1 2 4}, i.e. N is one of 1,2,4
Если вы не хотите работать с конечными доменами, существует более общая идея логического программирования. Вы можете создать точки выбора для различных возможных значений переменной, например ::100100
declare
proc {Script A}
A =
choice
lisa
[] ann
[] mary
[] joanna
end
end
{Show {SearchOne Script}} %% displays "[lisa]"
{Show {SearchAll Script}} %% displays "[lisa ann mary joanna]"
Это также возможно сделать с не статически известным числом значений, используя Комбинаторы .