2009-04-20 63 views
6

我在序言中解釋裝下兩個事實規則:Prolog的運算符優先級和匹配

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

現在,我嘗試下一次查詢的結果:

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

現在,我嘗試用下一個查詢:

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

據我所知,這是通過運算符優先級如何構建樹表達式:

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

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

這個解釋是否正確?

回答

4

是的,這是正確的。

默認的運算符優先級被定義爲自然的,即使用正常的數學優先級。但是,如果你不喜歡,你可以重新定義它。

是否改變優先級是一個好主意是另一回事,它有效地改變了Prolog的語法,並且可能導致解析問題。特別是如果您更改Prolog語法的運算符的優先級,並且優先級高於1000.