我是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
?-
答案 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.