2016-10-12 4 views
1

私はプロローグを初めて使っています。前置詞を使うシンプルなエキスパートシステムを作りたいと思います。排他的ORを使うのに苦労しています。ここに私のプログラムは、これまでのところです:プロローグ、排他的ORとのエラー

/*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

私はあなたが得るエラーを追加することをお勧めしますので、人々はassiあなたは – morha13

+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. 
+0

ありがとう、私は今それを得ました、@コーダーは基本的な方法で説明しました、私は電話を理解していないと私はあなたのことを完全に理解するでしょう –

+0

'xor'は一般的ではありませんオペレータ。 – false

関連する問題