Решатель уравнений в SWI-Prolog

Я хочу написать программу на SWI-Prolog это решает уравнения. я знаю GNU Prolog и это заставляет меня нервничать... Что здесь не так?

equation(X1,X2) :-
  {
    2*X1 + 3*X2 =:= 6,
    {X1 is 0; X1 is 1},
    {X2 is 0; X2 is 1}
  }.

X1 а также X2 всегда равно 0 или же 1,

1 ответ

Решение

У меня есть файл с

:- [library(clpq)].
eq(X1, X2) :- {2 * X1 + 3 * X2 =:= 6}.

затем я компилирую и запускаю и получаю:

?- eq(A,B).
{B=2-2 rdiv 3*A}.

Это результат, который вы ожидаете?

редактировать

?- eq(A,B),A=1.
A = 1,
B = 4 rdiv 3.

?- eq(A,B),B=1.
A = 3 rdiv 2,
B = 1.

В разделе A.8.3 документации говорится, что объединение может содержать спецификацию "внешних" ограничений. Тогда вы можете свободно экспериментировать с дополнительным ограничением. Но если вы навязываете, что A и B будут связываться, вам следует выбрать соответствующие значения. AFAIK значения, которые вы опубликовали изначально, не могут удовлетворить уравнение.

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