2012-06-29 5 views
2

안녕하세요, 해결할 수없는 문제가 있습니다. 나는 Prolog 신참이다. 그리고 나는이 가계도 예제들을 엄청 많이 보았다.하지만 아무도 내 문제를 해결하지 못하는 것 같다. 끊어지지 않은 루프 루프

내가

son(X, Y) :- 
    \+daughter(X, Y), 
    father(Y, X). 

father(Y, X) :- 
    male(X), 
    son(X, Y). 

을 가지고 각자가 전에 하나를 충족시킬 때문에 따라서 로컬 스택 오류의 결과로, 그것은 조건 사이에 앞뒤로 이동합니다, 그 중 하나를 호출 말.

대부분 정의 중 하나를 삭제하는 것이 좋지만 아버지와 아들 쿼리에 응답해야합니다. 제발, 도와 줘,이게 너무 단순 해 보이지만, 난 그걸 알아 내지 못해. 한 번 루핑 한 후에 어떻게 깰 수 있습니까?

TIA

답변

2

당신 수 :

father(Y,X):- 
    male(X), 
    son_data(X,Y). 

son(X,Y):- 
    son_data(X,Y). 
son(X,Y):- 
    \+daughter(X, Y), 
    father(Y, X). 

데이터베이스가

son_data(mike,steph). 
.... 
father(nick,john). 
.... 

(NO 아들/2 항목과 같아야합니다

1) 당신은 래퍼 술어를 사용할 수 있습니다)

2) tabling (예 : XSB)을 지원하는 프롤로그 버전을 사용하십시오 (또는 구현하십시오. 그런 좋은 생각이 아니야)

+0

고마워! 매우 도움이되는 –