当我运行代码时,它返回sat作为输出?是要传达错误还是输出是什么意思?
%Scenario 2:
%Amy: “My report is original.”
%Brian: “Mine as well”
report(2, [Amy,Brian]) :-
sat(Amy=:=Amy),
sat(Brian=:=Brian),
write('1 they are telling the truth , 0 they are lying').
我得到的输出是:-
它不是要向您传达错误,而是要尽可能具体。也就是说,无论何时sat(Amy=:=Amy), sat(Brian=:=Brian)
和sat(Amy=:=Amy)
,sat(Brian=:=Brian)
都是可以满足的。
CLP(B)不会自动将表达式中的变量指定为布尔值。您可以使用labeling(+Vs)
进行如下通知:
?- use_module(library(clpb)).
?- sat(Amy=:=Amy), sat(Brian=:=Brian), labeling([X,Y]).
X = Y, Y = 0,
sat(Amy=:=Amy),
sat(Brian=:=Brian)
这只是您可以使用回溯获得其他解决方案的第一个解决方案。