2016-05-30 18 views
0

述語の引数に演算子(+、>、=、!=、> =など)を含めることは可能ですか?(例は実証的なものであり、あまり使用しません)Prolog - 述語の演算子

test(A > B) :- A > B. 
test(A >= B) :- A < B. 

が動作しているようですが、:

test(A != B) := A > B. 
test(A <> B) := A < B. 

はしない - その理由は?なぜオペレーターが含まれることがあり、時にはそうではないのでしょうか? test(A != B) := A > B.を動作させるにはどうすればよいですか?

私はsicstusで働いています。

答えて

3

記号!=,<>および:=は、Prologの演算子ではありません。 op/3指示文を使用して演算子を作成する必要があります。演算子の宣言は、コードを解析する前にPrologに見える必要があります。

文字列!=はPrologのトークンではないため、一重引用符で囲む必要があります。

:- op(700, xfx, '!='). 
:- op(700, xfx, <>). 
:- op(1100, xfx, :=). 

test(A '!=' B) := A > B. 
test(A <> B) := A < B. 

上記では、2つの句を持つ述語を定義しています。句には体がなく、述語の名前は:=であり、そのアリティは2です。それはまったく同じです:

:=(test('!='(A,B)), >(A,B)). 
:=(test(<>(A,B)), <(A,B)).