7.9.1 Tests Related to the Current Goal

The following tests give access to basic information about the current invocation.

inv(Inv)
The invocation number of the current goal is Inv. Invocation numbers start from 1.
depth(Depth)
The current execution depth is Depth.
goal(MGoal)
The current goal is an instance of the module name expanded MGoal template. The current goal and MGoal are unified. This condition is equivalent to the subsumes(MGoal,CurrentGoal) test (subsumes/2 is defined in library(terms), see Term Utilities).
pred(MFunc)
The module name expanded MFunc template matches (see notes below) the functor (M:F/N) of the current goal. The unification required for matching is carried out.
module(Module)
The current goal is invoked from module Module. For compiled calls to built-in predicates Module will always be prolog.
goal_private(GoalPriv)
The private information associated with the current goal is GoalPriv. This is initialized to an unbound variable at the Call port. It is strongly recommended that GoalPriv be used as an open ended list, see Storing User Information in the Backtrace.
exited(Boolean)
Boolean is true if the the current invocation has exited, and false otherwise. This condition is mainly used for looking at past execution states.
parent_inv(Inv)
The invocation number of the debugger-parent (see notes below) of the current goal is Inv.
ancestor(AncGoal,Inv)
The youngest debugger-ancestor of the current goal, which is an instance of the module name expanded AncGoal template, is at invocation number Inv. The unification required for matching is carried out.

Notes:

The debugger-parent of a goal is the youngest ancestor of the goal present on the backtrace. This will differ from the ordinary parent if not all goals are traced, e.g. if the goal in question is reached in zip mode. A debugger-ancestor of a goal is any of its ancestors on the backtrace.

In the goal and ancestor tests above, there is a given module qualified goal template, say ModT:GoalT, and it is matched against a concrete goal term Mod:Goal in the execution state. This matching is carried out as follows:

  1. It is checked that Goal is an instance of GoalT.
  2. Goal and GoalT are unified.
  3. It is checked that Mod and ModT are either unifiable (and are unified), or name such modules in which Goal has the same meaning, i.e. either one of Mod:Goal and ModT:Goal is an exported variant of the other, or both are imported from the same module.

Similar matching rules apply for predicate functors, in the pred condition. In this test the argument holds a module qualified functor template, say ModT:Name/Arity, and this is matched against a concrete goal term Mod:Goal in the execution state.

  1. It is checked that the functor of Goal unifies with Name/Arity, and this unification is carried out.
  2. It is checked that Mod and ModT are either unifiable (and are unified), or name such modules in which Goal has the same meaning.