Hook predicates are called by the system. They enable you to
modify SICStus Prolog’s behavior. They are undefined by default. The
idea of a hook predicate is that its clauses are independent of each
other, and it makes sense to spread their definitions over several
files (which may be written by different people). In other words, a
hook predicate is typically declared to be multifile (see Multifile Declarations).
Often, an application needs to combine the functionality of several
software modules, among which some define clauses for such hook
predicates. By simply declaring every hook predicate as multifile,
the functionality of the clauses for the hook predicate is
automatically combined. If this is not done, then the last software module
to define clauses for a particular hook predicate will effectively
supersede any clauses defined for the same hook predicate in a
previous module. Most hook predicates must be defined in the
user module, and only their first solution is relevant.