1
在SWI-Prolog的用戶模式,我定義一個函數如下:一個簡單的序言語法問題
|: test1(+X,+Y) :- X >= 0, X =:= Y.
現在在查詢方式:
?- test1(1, 1).
false.
我期待這回「真「因爲1大於0而1等於1.
那麼我哪裏出錯了?
在SWI-Prolog的用戶模式,我定義一個函數如下:一個簡單的序言語法問題
|: test1(+X,+Y) :- X >= 0, X =:= Y.
現在在查詢方式:
?- test1(1, 1).
false.
我期待這回「真「因爲1大於0而1等於1.
那麼我哪裏出錯了?
這是你想要什麼,而不是:
test1(X,Y) :- X >= 0, X =:= Y.
然後:
?- test1(1, 1).
true.
添加+, - 和?在謂詞參數前面不是Prolog的一部分。這只是一個記錄謂詞應該如何使用的慣例。
這裏是什麼GNU-prolog documentation不得不說:
模式指定是否當內置謂詞被稱爲參數必須被實例化。模式在類型之前使用符號進行編碼。可能的模式有:
- +:參數必須實例化。
- - :參數必須是變量(如果內置謂詞成功,將會實例化)。
- ?:參數可以被實例化或變量。
在實際的代碼中,您不應該在參數前加一個+。
謝謝atnnn;) – Olhovsky 2011-01-26 00:26:50