如何在Prolog中强制结果为false

时间:2017-10-21 19:35:35

标签: prolog

我想知道是否可以强制结果,例如

test(0, 0, 0).

在Prolog中是假的。

1 个答案:

答案 0 :(得分:3)

是的,您可以使用一个小帮助谓词来执行此操作:

:- use_module(library(clpfd)).

test_(X,Y,Z) :-                        % base relation
   Z #= X+Y.                           % here: integer sum

test(X,Y,Z) :-                         % exclude (0,0,0) as a solution
   abs(X) + abs(X-Y) + abs(Y-Z) #\= 0,
   test_(X,Y,Z).

示例查询:

?- test(1,1,2).
true
?- test(1,-1,0).
true

请注意如何排除不需要的解决方案:

?- test_(0,0,0).            % 0+0 = 0
true
?- test(0,0,0).
false