Решение проблемы ограничения ртути - PullRequest
2 голосов
/ 02 мая 2019

Я немного знаю Пролог и часто использую 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 не помогает.)

Как вы решаете ограничения в Меркурии?

...