In Section 3.1.2, a meta-interpreter is given that defines the behaviour of query packs. In practice this meta-interpreter is not useful, because in many cases the meta-interpreter itself causes more overhead than the use of query packs can compensate for. Indeed, previously reported results [20,3] indicate that the overhead involved in a high-level Prolog implementation destroys the efficiency gain obtained by redundancy reduction. Moreover as discussed in Section 3.1.2, the meta-interpreter does not have the desired time-complexity. This shows that the desired procedural semantics of or can be implemented in Prolog itself, but not with the desired performance because Prolog lacks the appropriate primitives.
The conclusion is that changes are needed at the level of the Prolog engine itself. This requires an extension of the WAM (Warren Abstract Machine) which is the underlying abstract machine for most Prolog implementations. The extended WAM provides the or operator as discussed above: it permanently removes branches from the pack that do not need to be investigated anymore. This extended WAM has become the basis of a new Prolog engine dedicated to inductive logic programming, called ILPROLOG. This section continues with the introduction of some basic terminology for query packs and explains at a high level how query pack execution works. Next our meta-interpreter for the query pack execution is given and finally the changes needed for the WAM are clarified.