2014-07-25 5 views
0

나는 프롤로그의 초보자이며 "공통 부모"를 공유하는 형제 자매를위한 "체인 규칙"프로그래밍에 관한 질문이 있습니다. 내 프로그램에서프롤로그 - 스텝 형제 체인 규칙

, 나는 가정하고 그 부모의 존재 (X, Y) X가 나는 규칙 체인 (X, Y 필요 Y.

의 부모라고 주장 사실, L은) : X는 조상 Y의입니다 있다면, L은 Y와 오래된 것을 처음으로 연령의 순서 (내림차순으로 나열 또한 X의 후손 Y의 모든 조상)을 목록 포함 X입니다. 즉, 내 목록은 모두 사람이 사람과 조상을 가진 사람을 연결하는 사람이어야합니다..

는 예 : 체인 (베드로 메리 [피터, 폴 슈 메리]), 그때 베드로의 부모 폴이다 경우 의 부모 suemary의 부모입니다.

참고 : 나는 stepSibling 익숙 (A, B)의 관계가 부모 파트너 (X, Y)을 통해 자격이 부여됩니다 관계; 어디 및 B는 형제 관계 아이 (a, X)과아이 (b, Y)를 통해 그들의 각 부모의 자식이다. 따라서; 나는 단지 양 계부가 공통 부모 인을 공유하는 관계와 혼동을 느낍니다. 예.하위 (a, X)하위 (b, X)과 같은 하위 관계입니다.

답변

0

이것은 초기 프롤로그 코스에서 논의한 일반적인 계보 문제에 대한 흥미로운 비꼬는 말입니다.

% base case: your parent is an ancestor 
ancestor(X, Y) :- parent(X, Y). 
ancestor(X, Z) :- parent(X, Y), ancestor(Y, Z). 

: X가 Y를

의 조상

그래서 당신은 X가 Y를의 부모가 당신이 같은 ancestor/2을 쓸 수있다라는 술어 parent(X,Y)이 경우의 처음 단순화를 생각해 보자, ancestor(X,Y)는 사실이다 이 같은 샘플 데이터베이스로 그것은 잘 작동합니다 : 이것은 당신이 원하는에 가까운 ancestor(peter, mary) 같은 쿼리를 위해 작동

parent(peter, paul). 
parent(paul, sue). 
parent(sue, mary). 

.이 나타납니다

chain(X, Y, [X,Y])  :- parent(X, Y). 
chain(X, Z, [X|Chain]) :- parent(X, Y), chain(Y, Z, Chain). 

작동하려면 : 다음 단계는 다음과 같이 보일 것이다, 체인을 유지하는 것입니다

?- chain(peter, mary, X). 
X = [peter, paul, sue, mary] ; 
false. 

질문 단계 형제 자매를 언급 때문에 나는,하지만 걱정을하고 체인이 다른 사람들도 포함시켜야합니다. 그것은 단지 왕이나 다른 요구 사항이 있습니까? 그렇다면 예제에 반영되지 않으므로 추가 세부 정보로 질문을 추가해야 할 수도 있습니다.

+0

내가 언급했던 "다른"요소는 같은 조상 사슬과도 관련이있는 "모든"다른 구성원에 관한 것입니다. 위의 예는 저에게 완벽하게 응답합니다. 예 : ? - chain (peter, mary, X) X = [피터, 폴, 스웨이드, 메리]; // 이것은 정확히 내가 언급 한 것입니다. 또한 프로그램을 성공적으로 실행했습니다. 감사합니다. :) – yamis7190