2012-02-18 2 views
2

최근에 프롤로그에 대해 배우고 중개 연산자를 정의하는 데 사용되는 세 가지 유형을 혼동합니다.프롤로그 중온 연산자 정의

연산자 유형을 지정할 때 xfx, xfy 및 yfx의 차이점은 무엇입니까? 나는이 문제에 대해 봤는데 유용한 것을 발견하지 못했다.

:- op(500,yfx,is_alive). 
is_alive(A,B) :- display([A,B]). 
:- op(500,xfy,is_alive2). 
is_alive2(A,B) :- display([A,B]). 
:- op(500,xfx,is_alive3). 
is_alive3(A,B) :- display([A,B]). 

하고 출력을 : :

| ?- 1 is_alive 2. 
'.'(1,'.'(2,[])) 

yes 
| ?- 1 is_alive2 2. 
'.'(1,'.'(2,[])) 

yes 
| ?- 1 is_alive3 2. 
'.'(1,'.'(2,[])) 

yes 

이 결과는 나에게 아무런 차이를 보이지 않았다

나는 프롤로그에 다음 코드를 입력했습니다.

답변

3

연산자의 '유형'은 연관성을 제어합니다. (5 - 4 - 3) "은 좌 결합 능력으로 알려진"(5-4) - 3 "또는 오른쪽 결합 능력 인"5 - (4 - 3) "로 해석되어야하는지의 여부.

마이너스 연산자가 일반적으로 예상대로 작동해야하는 경우 왼쪽 연관을 사용하도록 'yfx'로 정의해야합니다. 'xfx 및'xfy '와 같은 다른 유형은 이에 대한 변형입니다. http://www.cse.unsw.edu.au/~billw/cs9414/notes/prolog/op.html에서 자세한 내용보기

+0

답변 해 주셔서 감사합니다. – JasonLi

+2

각 연산자에 대해 (1 is_alive 2 is_alive 3) 시도하면 차이가 나타납니다. – DaveEdelstein

2

Prolog가 ISO를 준수하는 경우 write_canonical을 사용하여 연산자 우선 순위 및 결합 성의 효과를 분석 할 수 있습니다. 예 :

?- write_canonical(1+2*3). 
+(1,*(2,3)) 
true.