Пролог перечислите все возможные пути рекурсии - PullRequest
0 голосов
/ 28 ноября 2011

Я хотел бы перечислить все возможные пути

country(england,france). 
country(france,bulgaria).
country(bulgaria,germany).
country(england,bulgaria).
country(germany,italy).
edit: additional to

country(germany,italy).
country(england,italy).
country(england,greece).
country(greece,france).

connectto(X, Y) :-
country(X, Y).

? - op (150, xfy, to).

X в Y: -get_waypoints (X, Y, Waypoints), писать (Waypoints), терпят неудачу.

get_waypoints(Start, End, [Waypoint|Result]) :-
   country(Start, End),
   !;country(Start, Waypoint),
   get_waypoints(Waypoint, End, Result).

в противном случае из исходного кода система выдаст

   | ?- england to italy.
   []no

из кода, который вы упомянули.

теперь проблема возникает в

    | ?- england to italy.
    [_31242|_31243][france,bulgaria,germany,_31332|_31333]   
    [bulgaria,germany,_31422|_31423]
    [greece,france,bulgaria,germany,_31602|_31603]no

хотя он показывает все возможные маршруты.

Любое решение будет оценено.

1 Ответ

2 голосов
/ 28 ноября 2011

Спросите, если вам нужно объяснение:

country(bulgaria,germany).
country(england,bulgaria).
country(england,france). 
country(england,greece).
country(england,italy).
country(france,bulgaria).
country(greece,france).
country(germany,italy).

:- op(150, xfy, to).

X to Y :-
    findall(Waypoint, get_waypoints(X,Y,Waypoint), Waypoints),
    write(Waypoints).

get_waypoints(Start, End, []) :- 
    country(Start, End).
get_waypoints(Start, End, [Waypoint|Result]) :-
    country(Start, Waypoint),
    get_waypoints(Waypoint, End, Result).

Использование:

?- england to italy.

Здесь я обновил свой код, чтобы он соответствовал вашим ожиданиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...