Prolog,异或的错误

时间:2016-10-12 08:53:20

标签: prolog

我是prolog的新手,我想创建一个使用介词的简单专家系统,我正在努力使用异或。到目前为止,这是我的计划:

/*facts*/
a.
b.
c.

/*rules*/
e :- c.
d :- a, \+e.
f :- xor(b, d). /*here is where it gives me an error*/

/*query*/
?- f.

/*error*/
ERROR: f/0: Undefined procedure: (xor)/2
  Exception: (8) b xor d ? no debug
?-

1 个答案:

答案 0 :(得分:0)

我认为这不是解决问题的更好方法,但无论如何......

?- X is 1 xor 0.
X = 1.

?- X is 1 xor 1.
X = 0.

所以

:- meta_predicate xor(0,0).

% reify arguments and apply usual boolean
xor(A, B) :-
  ( call(A) -> X=1 ; X=0 ),
  ( call(B) -> Y=1 ; Y=0 ),
  1 is X xor Y.

现在

?- xor(true,false).
true.

?- xor(true,true).
false.

?- xor(true,1 is 7-6).
false.