2012-11-05 2 views
1
나는 프롤로그에서 숙제하고 있어요

나는 충분히 비슷한 사용할 필요가프롤로그 수 있도록 여러 쿼리 인수 주문

brothers(a,b) 
brothers(c,d) 

을 나는 조회 할 수있는 기능을 구현해야 brothers(b,a) 그리고 데이터베이스에 중복되지 않고 참이됩니다.

내가 사용하는 것에 대해 생각했다 : brothers(X,Y):- brothers(Y,X)하지만 무한히 재귀적일 것이다. 나는 두 이름이 모두 같아야하기 때문에 내가 무엇을 할 수 있는지 잘 모르겠습니다.

답변

3

음, 무한 재귀를 깨뜨려야합니다! 다양한 방법으로 수행 할 수 있습니다.

1) 주문
brother(X,Y) 규칙 X>Y에 데이터베이스를 만듭니다. 그런 다음, 규칙 brother(X,Y):- Y>X, brother(Y,X).

2) XSB (또는 지원하는 다른 프롤로그 구현)를 사용하는 경우
가능한 테이블 화 래퍼 술어
brother(X,Y):- brother_facts(X,Y) ; brother_facts(Y,X).

3)를 추가합니다. Tabling은 메모 작성과 같으며 루프를 깨뜨릴 것입니다.

+0

감사합니다. 게시 한 시간과 관련하여 2 번을 수행 했으므로 가이드 라인에 맞는 것을 희망합니다. 번호 1은 정말 재미 있지만, 그런 생각은 한번도 들지 않았습니다. –