Пролог Разница квадратов
Я хочу найти разницу между квадратом 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