Пролог SWI, CLP(R): Могу ли я связать ограничение с переменной?

Или переменная ограничения может быть связана с другой переменной (см. Пример ниже)?

?- use_module(library(clpr)).
true.

% this works
?- {X >= 5.0, X =< 10.0}, minimize(X).
X = 5.0 .

% but I do not know why this fails
?- C = {X >= 5.0, X =< 10.0}, minimize(X).
false.

% and this also fails consequently
?- C = {X >= 5.0, X =< 10.0}, term_variables(C, [Var]), minimize(Var).
false.

1 ответ

Решение

У Пролога нет "назначения", так что будьте осторожны, что обычно вы должны сначала понять его специфическую модель программирования. В этом конкретном случае вы можете "вызывать" ваши привязки, предоставляя библиотеке (clpr) возможность выполнять свои сложные обязанности:

?- use_module(library(clpr)).
true.

?- {X >= 5.0, X =< 10.0}, minimize(X).
X = 5.0 ;
false.

?- C = {X >= 5.0, X =< 10.0}, C, minimize(X).
C = {5.0>=5.0, 5.0=<10.0},
X = 5.0 ;
false.

но я думаю, что систематическое применение этого трюка к вашей модели ограничений может привести к хрупкому применению.

Другие вопросы по тегам