f1 plane(to, ny). f2 plane(ny, london). f3 plane(london, bombay). f4 plane(london, oslo). f5 plane(bombay, katmandu). f6 boat(oslo, stockholm). f7 boat(stockholm, bombay). f8 boat(bombay, maldives). f9 leg(X,Y) :- plane(X,Y). f10 leg(X,Y) :- boat(X,Y). f11 trip(X,Y,[X,Y]) :- leg(X,Y). f12 trip(X,Y,[X|Rest]) :- leg(X,Z), trip(Z,Y,Rest). ------------------------------------------------------------------------ ?- [trip]. % trip compiled 0.00 sec, 2,532 bytes Yes ?- trace, trip(to,oslo,Trip). 1 Call: (8) trip(to, oslo, _G159) ? creep 2 Call: (9) leg(to, oslo) ? creep 3 Call: (10) plane(to, oslo) ? creep 4 Fail: (10) plane(to, oslo) ? creep 5 Redo: (9) leg(to, oslo) ? creep 6 Call: (10) boat(to, oslo) ? creep 7 Fail: (10) boat(to, oslo) ? creep 8 Fail: (9) leg(to, oslo) ? creep 9 Redo: (8) trip(to, oslo, _G159) ? creep 10 Call: (9) leg(to, _G235) ? creep 11 Call: (10) plane(to, _G235) ? creep 12 Exit: (10) plane(to, ny) ? creep 13 Exit: (9) leg(to, ny) ? creep 14 Call: (9) trip(ny, oslo, _G228) ? creep 15 Call: (10) leg(ny, oslo) ? creep 16 Call: (11) plane(ny, oslo) ? creep 17 Fail: (11) plane(ny, oslo) ? creep 18 Redo: (10) leg(ny, oslo) ? creep 19 Call: (11) boat(ny, oslo) ? creep 20 Fail: (11) boat(ny, oslo) ? creep 21 Fail: (10) leg(ny, oslo) ? creep 22 Redo: (9) trip(ny, oslo, _G228) ? skip 23 Exit: (9) trip(ny, oslo, [ny, london, oslo]) ? creep 24 Exit: (8) trip(to, oslo, [to, ny, london, oslo]) ? creep Trip = [to, ny, london, oslo] Yes