2009-04-20 4 views
6

일치 규칙 :프롤로그 연산자 우선 순위와 나는 다음 두 가지 사실 내 프롤로그 인터프리터에로드 한

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보다 높은 우선 순위로 변경하는 경우