Until now we discussed the public module interface that is, at least to some extent, portable between Prolog implementations with a module system that is derived from Quintus Prolog. The remainder of this chapter describes the underlying mechanisms that can be used to emulate other module systems or implement other code-reuse mechanisms.
In addition to built-in predicates, imported predicates and locally
defined predicates, SWI-Prolog modules can also call predicates from its
import modules. Each module has a (possibly empty) list of
import modules. In the default setup, each new module has a single
import module, which is user
for all normal user modules
and
system
for all system library modules. Module user
imports from system
where all built-in predicates reside.
These special modules are described in more detail in section
6.11.
In general, the import relations between modules form an acyclic directed graph. The import relation affects the following mechanisms:
user
and system
modules (in that order).system
. The user may
define operators in user
to make them globally visible for
compatibility with e.g., SICStus Prolog that has no local operators.
Normally operators are defined in a module and, when applicable,
exported using the module/2
module header.The list of import modules for a specific module can be manipulated and queried using the following predicates, as well as using set_module/1.
user
, which imports from
system
. The predicates add_import_module/3
and
delete_import_module/2
can be used to manipulate the import list. See also default_module/2.start
or end
depending on
StartOrEnd. See also import_module/2
and delete_import_module/2.