Recursive travel

The easiest way to find this out is to use either trace/0 or gtrace/0. Since gtrace/0 is rather complex being a GUI, I will just use trace for this example.

?- trace.
true.

[trace]  ?- travel_01(valmont,frankfurt,Path).
   Call: (10) travel_01(valmont, frankfurt, _4260) ? creep
   Call: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], _4520) ? 

As you can see trace has shown the call to travel_01_helper/4 with the arguments used as input bound, and the augment used as output unbound. _4520 is a system generated variable which is unbound.

For simple goals, trace/0 can be used with protocol/1. See: Wiki: How to - protocol/1


?- set_prolog_flag(color_term,false).
true.

?- current_prolog_flag(color_term,X).
X = false.

?- working_directory(_,"C:/Users/Eric/Documents/Prolog").
true.

?- leash(-all),visible(+all).
true.

?- protocol("./trace_output.txt").
true.

?- trace.
true.

[trace]  ?- travel_01(valmont,frankfurt,Path).
   Call: (10) travel_01(valmont, frankfurt, _596)
   Unify: (10) travel_01(valmont, frankfurt, _596)
   Call: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], _856)
   Unify: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], [(_842, frankfurt),  (start, valmont)])
   Call: (12) byCar(valmont, frankfurt)
   Fail: (12) byCar(valmont, frankfurt)
   Redo: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], [(_842, frankfurt),  (start, valmont)])
   Call: (12) byTrain(valmont, frankfurt)
   Fail: (12) byTrain(valmont, frankfurt)
   Redo: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], [(_842, frankfurt),  (start, valmont)])
   Call: (12) byPlane(valmont, frankfurt)
   Fail: (12) byPlane(valmont, frankfurt)
   Redo: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], _856)
   Unify: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], _856)
   Call: (12) byCar(valmont, _852)
   Unify: (12) byCar(valmont, saarbruecken)
   Exit: (12) byCar(valmont, saarbruecken)
   Call: (12) _850=car
   Exit: (12) car=car
   Call: (12) travel_01_helper(saarbruecken, frankfurt, [(car, saarbruecken),  (start, valmont)], _868)
   Unify: (12) travel_01_helper(saarbruecken, frankfurt, [(car, saarbruecken),  (start, valmont)], [(_854, frankfurt),  (car, saarbruecken),  (start, valmont)])
   Call: (13) byCar(saarbruecken, frankfurt)
   Fail: (13) byCar(saarbruecken, frankfurt)
   Redo: (12) travel_01_helper(saarbruecken, frankfurt, [(car, saarbruecken),  (start, valmont)], [(_854, frankfurt),  (car, saarbruecken),  (start, valmont)])
   Call: (13) byTrain(saarbruecken, frankfurt)
   Unify: (13) byTrain(saarbruecken, frankfurt)
   Exit: (13) byTrain(saarbruecken, frankfurt)
   Call: (13) _854=train
   Exit: (13) train=train
   Call: (13) lists:member((_860, frankfurt), [(car, saarbruecken),  (start, valmont)])
   Unify: (13) lists:member((_860, frankfurt), [(car, saarbruecken),  (start, valmont)])
   Fail: (13) lists:member((_860, frankfurt), [(car, saarbruecken),  (start, valmont)])
   Redo: (12) travel_01_helper(saarbruecken, frankfurt, [(car, saarbruecken),  (start, valmont)], [(train, frankfurt),  (car, saarbruecken),  (start, valmont)])
   Exit: (12) travel_01_helper(saarbruecken, frankfurt, [(car, saarbruecken),  (start, valmont)], [(train, frankfurt),  (car, saarbruecken),  (start, valmont)])
   Exit: (11) travel_01_helper(valmont, frankfurt, [(start, valmont)], [(train, frankfurt),  (car, saarbruecken),  (start, valmont)])
   Call: (11) lists:reverse([(train, frankfurt),  (car, saarbruecken),  (start, valmont)], _596)
   Unify: (11) lists:reverse([(train, frankfurt),  (car, saarbruecken),  (start, valmont)], _596)
   Exit: (11) lists:reverse([(train, frankfurt),  (car, saarbruecken),  (start, valmont)], [(start, valmont),  (car, saarbruecken),  (train, frankfurt)])
   Exit: (10) travel_01(valmont, frankfurt, [(start, valmont),  (car, saarbruecken),  (train, frankfurt)])
Path = [(start, valmont),  (car, saarbruecken),  (train, frankfurt)] .

[trace]  ?- nodebug.
true.

?- noprotocol.
true.

?- 
1 Like