2017-11-18 6 views
0

저는이 사실이나 데이터베이스를 프롤로그에두고 교육이 같거나 더 낮은 지 확인합니다. 예 : 고등학교 < = 고등학교는 참 고등학교 고등학교 < = 박사님도 사실이지만, 주인은 < = 고등학교는 거짓입니다.프롤로그에서 동일한 값을 두 번 인쇄하는 것을 중단하는 방법은 무엇입니까?

edu_less(high_school, bachelor). 
edu_less(bachelor, masters). 
edu_less(masters, phd). 

edu_lessOrEqual(X,X). 
edu_lessOrEqual(X, Y):- edu_less(X,Y). 
edu_lessOrEqual(X, Y):- edu_less(X,Z), 
         edu_lessOrEqual(Z,Y). 

하지만 하나만 참 출력으로 인쇄 할 때

edu_lessOrEqual(masters, phd). 
true; 
true; 
false. 

출력한다.

true; 
false. 

답변

2

기본적으로, edu_lessOrEqual/2의 세 번째 절에, 재귀 edu_lessOrEqual/2를 호출하기 때문에, 그래서 당신은 Z와 Y가 모두 phd 사실 그래서 충족 phd 같다 (phd 인스턴스화되는 경우와 바람 당신이 철자 한 논리). 세 번째 절의 끝에 Z \= Y을 추가하여 문제를 해결할 수 있지만,이 경우는 쓸모없는 선택 지점으로 끝내지 않도록 조건문을 사용하려는 유혹에 빠질 수 있습니다.