2016-05-30 1 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.?

Я работаю под сикстусом.

ответ

3

Символы !=, <> и := не являются операторами в Прологе. Вам необходимо сделать их операторами, с директивой op/3. Объявление оператора должно быть замечено Прологом, прежде чем он анализирует ваш код.

Последовательность символов != не является токеном в Prolog, поэтому вам необходимо окружить ее одинарными кавычками.

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

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

Приведенное выше определение предиката с двумя статьями. В предложениях нет тел, имя предиката := и его arity 2. Это точно так же, как:

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