首页 > 解决方案 > 当序言返回 sat 作为输出时,这意味着什么?

问题描述

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

我得到的输出是: -

在此处输入图像描述

标签: prolog

解决方案


它不是试图向您传达错误,而是尽可能具体。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)

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


推荐阅读