Я немного знаю Пролог и часто использую 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 не помогает.)
Как вы решаете ограничения в Mercury?