Я немного знаю Пролог и часто использую CLP (FD) и т. Д. Эта статья (написанная, по-видимому, в 2006 году) указывает на то, что у Меркурия теперь есть и решение ограничений. Я нашел несколько упоминаний об этом в Справочном руководстве по библиотеке . Однако я не могу найти, как его использовать. Например:
main(!IO) :-
A >= 2,
A =< 2,
io.write(A, !IO).
выдает ошибку компилятора
test1.m:011: In clause for `main(di, uo)':
test1.m:011: in argument 1 of call to predicate `int.>='/2:
test1.m:011: mode error: variable `A' has instantiatedness `free',
test1.m:011: expected instantiatedness was `ground'.
но в прологе, с clpfd,
A #>= 2, A #=< 2.
отлично работает, давая A = 2.
(Добавление # в код Mercury не помогает.)
Как вы решаете ограничения в Меркурии?