2011-01-26 58 views
1

在SWI-Prolog的用戶模式,我定義一個函數如下:一個簡單的序言語法問題

|: test1(+X,+Y) :- X >= 0, X =:= Y. 

現在在查詢方式:

?- test1(1, 1). 
false. 

我期待這回「真「因爲1大於0而1等於1.

那麼我哪裏出錯了?

回答

5

這是你想要什麼,而不是:

test1(X,Y) :- X >= 0, X =:= Y. 

然後:

?- test1(1, 1). 
true. 

添加+, - 和?在謂詞參數前面不是Prolog的一部分。這只是一個記錄謂詞應該如何使用的慣例。

這裏是什麼GNU-prolog documentation不得不說:

模式指定是否當內置謂詞被稱爲參數必須被實例化。模式在類型之前使用符號進行編碼。可能的模式有:

  • +:參數必須實例化。
  • - :參數必須是變量(如果內置謂詞成功,將會實例化)。
  • ?:參數可以被實例化或變量。

在實際的代碼中,您不應該在參數前加一個+。

+0

謝謝atnnn;) – Olhovsky 2011-01-26 00:26:50