2009-04-20 12 views
6

ho i prossimi due fatti caricata nel mio interprete prologo:Prolog precedenza degli operatori e regole di corrispondenza

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

Ora cerco i prossimi query con che risultati:

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

Ora cerco con il query successiva:

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

Come ho capito, questo è spiegato da come la precedenza dell'operatore costruisce l'espressione dell'albero :

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

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

Questa spiegazione è corretta?

risposta

4

Sì, questo è corretto.

La precedenza predefinita dell'operatore è definita come naturale, ovvero utilizzare la normale precedenza matematica. Ma se non ti piace, puoi ridefinirlo.

Se la modifica della precedenza è una grande idea è un'altra questione, cambia effettivamente la sintassi di Prolog e può portare a problemi di analisi. Soprattutto se si modifica la precedenza degli operatori per la sintassi di Prolog, con precedenza superiore a 1000.