프롤로그에 상당히 익숙하며 "route(Startpoint,Endpoint,Route)
"술어가있는 경로를 요청할 수있는 프로그램을 만들고 싶습니다.방향 그래프의 프롤로그 경로
내 코드는 지금까지 있습니다 :
% facts
connection(s1,s2).
connection(s2,s3).
connection(s3,s4).
connection(s4,s5).
connection(s5,s6).
connection(s6,s7).
connection(s7,s1).
% predicates
route1(X,Y,[X,Y]) :- connection(X,Y).
route1(X,Y,R) :- connection(X,Z), route1(Z,Y,RZ), R=[X|RZ].
route2(X,Y,[X,Y]) :- connection(Y,X).
route2(X,Y,R) :- connection(Z,X), route2(Z,Y,RZ), R=[X|RZ].
route(X,Y,R) :- route1(X,Y,R); route2(X,Y,R).
내 코드는 어떤 경로 작동하지만 (위의 사실에서처럼)주기에 제공하지 않을 때. Prolog에서 스테이션이 경로에서 여러 번 방문하는 것을 방지하려면 어떻게해야합니까? 예를 들어
나는 "?- route1(s1,s4,R).
는"프롤로그가 먼저 나에게 올바른 길 "[s1,s2,s3,s4]
"를 제공 요구, 그러나 또한 나에게 "[s1, s2, s3, s4, s5, s6, s7, s1, s2, s3, s4]
", "[s1, s2, s3, s4, s5, s6, s7, s1, s2, s3, s4, s5, s6, s7, s1, s2, s3, s4]
"등등과 같은 다른 경로를 제공합니다.
미리 감사드립니다.
[S1, S2, S3, s4]. :/ – zer0kai
답변 편집 죄송합니다. – coder
감사합니다 !! 프롤로그가 정렬 술어와 관련하여 어떤 역할을하는지 조금 더 자세히 설명해 주시겠습니까? – zer0kai