2009-04-20 8 views
6

Ich habe in den nächsten zwei Fakten in meinen Prolog-Interpreter geladen:Prolog Operator Vorrang und Regeln passend

foo(U+V,1). 
foo(U*V,2). 

Jetzt versuche ich die nächsten Abfragen mit, dass die Ergebnisse:

foo(x*x+x,R). --> R = 1 
foo(x+x*x,R). --> R = 1 
foo(x*x*x,R). --> R = 2 

Jetzt versuche ich mit der nächste Abfrage:

foo(x*x-x,R). --> no 

wie ich verstehe, ist dies erklärt, wie die Rangfolge der Operatoren den Baum Ausdruck bauen :

x+x*x --> +   so it matches with --> + 
     /\        /\ 
      x *        U V 
      /\ 
      x x 

x-x*x --> -   DOES NOT matches any fact. 
     /\        
      x *         
      /\ 
      x x 

Ist diese Erklärung korrekt?

Antwort

4

Ja, das ist richtig.

Die standardmäßige Operatorpriorität ist als natürlich definiert, d. H. Verwenden Sie die normale mathematische Priorität. Aber wenn Sie das nicht mögen, können Sie es neu definieren.

Ob das Ändern der Priorität eine großartige Idee ist, ist eine andere Sache, es ändert effektiv die Syntax von Prolog und kann zu Parsing-Problemen führen. Vor allem, wenn Sie die Priorität der Operatoren für die Prolog-Syntax ändern, mit Vorrang über 1000.