The trace then looks like this:p(X,Y) :- trace_call_port(call,_, Y is X*X-1), *(X,X,T), -(T,1,Y), trace_exit_port.
Another example is the insertion of additional ports for existing boxes, in particular the current parent box:[eclipse 8]: p(3,Y). (1) 1 CALL p(3, Y) %> creep (2) 2 CALL Y is 3 * 3 - 1 %> skip (2) 2 EXIT 8 is 3 * 3 - 1 %> creep (1) 1 EXIT p(3, 8) %> creep Y = 8
This gives rise to the following trace:p :- trace_parent_port(clause1), writeln(hello), fail. p :- trace_parent_port(clause2), writeln(world).
Note that the additional ports share the parent's invocation number, so the i command can be used to skip from one to the other.?- p. (1) 1 CALL p %> creep (1) 1 CLAUSE1 p %> creep S (2) 2 CALL writeln(hello) %> creep hello S (2) 2 EXIT writeln(hello) %> creep (3) 2 CALL fail %> creep (3) 2 FAIL fail %> creep (1) 1 NEXT p %> creep (1) 1 CLAUSE2 p %> creep S (4) 2 CALL writeln(world) %> creep world S (4) 2 EXIT writeln(world) %> creep (1) 1 EXIT p %> creep Yes (0.00s cpu)