2013-02-18 2 views
2

프롤로그를 처음 사용하고 프롤로그에서 우선 순위를 변경하여 운영자를 재 할당하려고합니다. 나는 다음과 같은 4 오류로 실행 해요 : (다른를프롤로그 재 지정 연산자

warning: directive failed (op(1000,xf,+)) with exception (error(permission_error(create,operator,+),op/3)) 

나는 또한 모듈 하나에 오류가 발생합니다 :

:-op(1000,yf,+). %unary plus% 
:-op(1000,yf,-). %unary minus% 
:-op(750,yfx,"%"). %modulo% 

첫 번째 두 사람은 나에게 이렇게 가고 유사한 오류를 줄 오류),하지만 그게 내가 따옴표로 % 동봉되어 있어야 아니에요 (용의자하지만 어떻게 생각 나는 코멘트 마커에서 차별화해야합니까?).

다른 연산자 (예 : 더하기 연산자 :-op(500,yfx,+).)를 재정의 했으므로 아무런 문제가 없습니다. 위에 나열된 3 개에서만 오류가 발생합니다.

누구든지이 문제에 대해 의견을 개진 할 수 있습니까?

감사합니다.

+0

swi-prolog는 처음 두 개를 허용하고 '유형 오류 :'atom '이 필요하며 3 번째에'37 '이 발견됩니다. 난 당신이 모듈로 연산자 주위에 작은 따옴표가 필요합니다 생각합니다. – CapelliC

답변

1

GNU 프롤로그 documentation는 상태 여기에 오류에서 처음에

An atom can have multiple operator definitions (e.g. prefix and infix like +) however an atom cannot have both an infix and a postfix operator definitions.

그 두 가지 선언. 그런 다음 지정자를 fy으로 변경해야합니다. 모듈로 연산자는 작은 따옴표를 사용해야합니다.

1

+을 후위 교환 연산자로 정의하려고합니다. 그러나 +은 삽입 연산자 (infix operator)로도 정의되며 표준에서는 접미사와 중위 어 모두로 연산자를 정의 할 수 없습니다. 정말로 이것을 원하면 우선 순위 0을 사용하여 삽입 연산자를 정의 해제해야합니다.

그러나 + 또는 -과 같은 표준 연산자는 변경하지 않는 것이 좋습니다. C, C++, C#, Java, Perl, PHP, Javascript 등에서 연산자 우선 순위를 변경하는 것과 같습니다. 프로그래머로서의 삶을 매우 비참하게 만듭니다.

프롤로그에서 %을 연산자로 사용하는 것을 권장 할 수 없습니다. %가 의견을 시작합니다. 운영자로 사용하려면 항상 '%'으로 작성해야합니다. 프롤로그는 이미 연산자로 정의 된 modrem입니다. 충분하지 않아?

아마도 당신은 상당히 ISO에 부합하는 GNU Prolog를 사용하고있을 것입니다. 다른 프롤로그에서는 중위와 후위를 동시에 정의 할 수 있습니다. #237을 참조하십시오. 그러나 다른 프롤로그는 다르게 많은 일을합니다.

일반적인주의 사항 : 초보자 인 경우 연산자 테이블을 변경하는 것이 좋습니다. 먼저 표준 운영자에게 익숙해 져야합니다. 그리고 더 많은 경험을 통해 아마도 기존 연산자와 비슷한 우선 순위를 가진 새로운 연산자 만 추가하는 것을 선호 할 것입니다.


는 : ISO/IEC는 13211-1 : 1995 6.3.4.3 운영자, 마지막 단락 :

There shall not be an infix and a postfix operator with the
same name.