2014-11-24 3 views
-2

나는 미로 경로를 해결하는 데 도움이 필요합니다. 미리 감사는출입구 사이의 가능한 모든 경로

link(a,b). 
link(b,c). 
link(c,d). 
link(f,c). 
link(b,e). 
link(d,e). 
link(e,f). 

은 더 일반적인 경우에 대해 다룹니다 그들과 재귀 술어 사이의 링크가 있다는 사실에 기반한 인접한 두 점 (예를 들어 X와 Y) 사이의 경로를 정의하는 술어를 쓰기 X와 세 번째 점 (예를 들어 Y)과 Y와 Z 사이의 경로가 있다는 사실을 확립하여 임의의 두 인접하지 않은 점 (예 : X와 Z) 사이의 경로를 찾습니다.

2 개의 특별 객실 - 하나는 "a"에 연결되어 있고 "Entry"라고하고 다른 하나는 "f"에 연결되어 "Exit"라고합니다. 새로운 두 개의 방을 반영하기 위해 일련의 사실을 추가하십시오. 작업 1의 술어를 사용하여 Entry와 Exit 사이에 가능한 모든 경로를 찾아서 방문한 방의 목록을 작성하는 술어를 작성하십시오. 모든 반복 끝에 대화식 콘솔에 목록을 표시하는 또 다른 조건자를 작성하십시오. 즉, Exit에 도달 할 때마다 목록을 표시하십시오. 예상 결과와 실제 결과를 보여주는 테스트 계획을 작성하십시오. 이 솔루션을 평가하고 잠재적 인 문제점 및 그 발생을 야기 할 수있는 상황을 식별하십시오.

이 솔루션의 문제점은 반복적입니다. (a, f) 프롤로그에 no를 지정하고 싶습니다. 내 술어에 문제가 있습니까?

| 링크 (a, b). 링크 (b, c) 링크 (c, d) 링크 (f, c) 링크 (b, e) 링크 (d, e) 링크 (e, f).

라우트 (X, Y) : - 링크 (X, Y). route (X, Y) : - 링크 (X, Z), 경로 (Z, Y). 예

그래! ---------------------------------------- ! 오류 20 : 조건이 정의되지 않음 ! 목표 : 경로 (_31102, _31104) : - 링크 (_31102, _31104)

중단 된 | 링크 (a, f). 아니오

| ? - 경로 (X, Y).X = a, Y = b;

X = b, Y = c;

X = c, Y = d;

X = f, Y = c;

X = b, Y = e;

X = d, Y = e;

X = e, Y = f;

X = a, Y = c;

X = a, Y = e;

X = A, Y = D

;

X = A, Y = D

| 링크 (X, Z). X = a, Z = b

| ? - | 링크 (X, Z). X = a, Z = b;

X = b, Z = c;

X = c, Z = d;

X = f, Z = c;

X = b, Z = e;

X = d, Z = e; X = E

, Z = F는

+2

:

또는, 당신의 새 이름을 사용합니다. 아무도 당신을 위해 숙제를 할 수는 없지만, 많은 사람들은 당신이하지 못한 기술적 인 포인트를 이해하도록 도와 줄 준비가되어 있습니다. 누군가가 당신을 위해 그것을 바랄 것이라고 기대해야 할 운동을 게시하지 마십시오 ... – Antwane

+0

[둘러보기] (http://stackoverflow.com/tour)를 읽어이 사이트에 대한 정보를 얻으십시오. – false

답변

1
connected_to(A,B) :- 
    closure0(link, A,B). 

closure0/3의 정의 this question 참조. 당신은이 웹 사이트에 질문을하기 전에 시도 무엇을 더 설명해야

route(A0,A) :- 
    link(A0,A1), 
    closure0(link, A1,A). 
관련 문제