2016-05-30 176 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。它完全一樣:

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