Inline predicates represent ``primitive'' operations in the WAM. Calls to inline predicates are compiled into a sequence of WAM instructions in-line, i.e. without actually making a call to the predicate. Thus, for example, relational predicates (like >/2, >=/2, etc.) compile to, essentially, a subtraction followed by a conditional branch. As a resut, calls to inline predicates will not be trapped by the debugger, and their evaluation will not be visible during a trace of program execution. Inline predicates are expanded specially by the compiler and thus cannot be redefined by the user without changing the compiler. The user does not need to import these predicates from anywhere. There are available no matter what options are specified during compiling.
Table 3.1 lists the inline predicates of
XSB Version 2.5. Those predicates that start with _$
are internal predicates that are also expanded in-line during
compilation.
We warn the user to be very cautious when defining predicates whose functor starts with _$ since the names of these predicates may interfere with some of XSB's internal predicates. The situation may be particularly severe for predicates like '_$builtin'/1 that are treated specially by the XSB compiler.