Пролог Разница квадратов

Я хочу найти разницу между квадратом a+1 и квадратом a 2a+1 в прологе. По этой причине я написал такой код:

:- use_module(library(clpfd)).

kare(X,Y):- Y #= X*X.

abc(A,B,F) :-
        kare(A,P),
        kare(B,T), 
        F is P-T.

Я попробовал это с

?- abc(D,E,P).

ERROR: is/2: Arguments are not sufficiently instantiated.

Кто-нибудь, помогите мне с этой проблемой.

1 ответ

Вы получаете ошибку, потому что вы используете is/2, который ожидает привязки аргументов. Но в вашем примере запрос аргументов D, E а также P поэтому несвязанные переменные P а также T также не связаны, когда вы добираетесь до цели с помощью /2. Поскольку вы уже используете clpfd, используйте вместо этого #=/2:

abc(A,B,F) :-
   kare(A,P),
   kare(B,T),
   F #= P-T.    % <- here

Таким образом, ваш запрос дает результат:

   ?- abc(D,E,P).
D^2#=_A,
_A in 0..sup,
P+_B#=_A,
_B in 0..sup,
E^2#=_B
Другие вопросы по тегам