this is a simple prolog example of recursion. I cannot figure out where, and more or less how, to declare the exit statement. The test flight(sofia, dublin) should return true, but it keeps checking at the last steps if you can directFlight(dublin, dublin). Here is the code:
directFlight(sofia, varna).
directFlight(sofia, paris).
directFlight(sofia, london).
directFlight(london, edinburg).
directFlight(paris, new_york).
directFlight(new_york, seattle).
directFlight(london, dublin).
flight(City1, City2) :-
directFlight(City1, City3),
flight(City3, City2).
The output:
[trace] ?- flight(sofia, dublin).
Call: (8) flight(sofia, dublin) ? creep
Call: (9) directFlight(sofia, _878) ? creep
Exit: (9) directFlight(sofia, varna) ? creep
Call: (9) flight(varna, dublin) ? creep
Call: (10) directFlight(varna, _878) ? creep
Fail: (10) directFlight(varna, _878) ? creep
Fail: (9) flight(varna, dublin) ? creep
Redo: (9) directFlight(sofia, _878) ? creep
Exit: (9) directFlight(sofia, paris) ? creep
Call: (9) flight(paris, dublin) ? creep
Call: (10) directFlight(paris, _878) ? creep
Exit: (10) directFlight(paris, new_york) ? creep
Call: (10) flight(new_york, dublin) ? creep
Call: (11) directFlight(new_york, _878) ? creep
Exit: (11) directFlight(new_york, seattle) ? creep
Call: (11) flight(seattle, dublin) ? creep
Call: (12) directFlight(seattle, _878) ? creep
Fail: (12) directFlight(seattle, _878) ? creep
Fail: (11) flight(seattle, dublin) ? creep
Fail: (10) flight(new_york, dublin) ? creep
Fail: (9) flight(paris, dublin) ? creep
Redo: (9) directFlight(sofia, _878) ? creep
Exit: (9) directFlight(sofia, london) ? creep
Call: (9) flight(london, dublin) ? creep
Call: (10) directFlight(london, _878) ? creep
Exit: (10) directFlight(london, edinburg) ? creep
Call: (10) flight(edinburg, dublin) ? creep
Call: (11) directFlight(edinburg, _878) ? creep
Fail: (11) directFlight(edinburg, _878) ? creep
Fail: (10) flight(edinburg, dublin) ? creep
Redo: (10) directFlight(london, _878) ? creep
Exit: (10) directFlight(london, dublin) ? creep
Call: (10) flight(dublin, dublin) ? creep
Call: (11) directFlight(dublin, _878) ? creep
Fail: (11) directFlight(dublin, _878) ? creep
Fail: (10) flight(dublin, dublin) ? creep
Fail: (9) flight(london, dublin) ? creep
Fail: (8) flight(sofia, dublin) ? creep
false.
The issue is here at: Fail: (10) flight(dublin, dublin) ? creep. Any ideas how to fix this?