当序言返回坐作为输出是什么意思?

问题描述 投票:0回答:1

当我运行代码时,它返回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').

我得到的输出是:-

enter image description here

prolog logic swi-prolog logic-programming
1个回答
0
投票

它不是要向您传达错误,而是要尽可能具体。也就是说,无论何时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)

这只是您可以使用回溯获得其他解决方案的第一个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.