2016-05-30 19 views
0

Ist es möglich, Operatoren (wie +,>, =,! =,> = Usw.) in das Argument für ein Prädikat einzubeziehen (Beispiele unten sind nur eine Demonstration und haben keinen großen Nutzen)?Prolog - Operator im Prädikat

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

scheint zu funktionieren, aber:

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

nicht - warum? Warum können manchmal die Operatoren einbezogen werden und manchmal nicht? Wie kann ich test(A != B) := A > B. arbeiten lassen?

Ich arbeite unter sicstus.

Antwort

3

Die Symbole !=, <> und := sind keine Operatoren in Prolog. Sie müssen sie Betreiber mit der op/3 Richtlinie machen. Die Operator-Deklaration muss von Prolog gesehen werden, bevor der Code analysiert wird.

Die Zeichenfolge != ist in Prolog kein Token, daher müssen Sie sie in einfache Anführungszeichen setzen.

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

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

Das Obige definiert ein Prädikat mit zwei Klauseln. Die Klauseln haben keine Körper, der Name des Prädikats ist := und seine Arität 2. Es ist genau das gleiche wie:

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