5.9 Dynamic importing using import modules

Until now we discussed the public module interface that is, at least to some extend, portable between Prolog implementation 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, called user. Module user imports from system where all builtin predicates reside. These special modules are described in more detail in section 5.10.

The list of import modules can be manipulated and queried using the following predicates:

import_module(+Module, -Import)
True if Import is defined as an import module for Module. All normal modules only import from user, which imports from system. The predicates add_import_module/3 and delete_import_module/2 can be used to manipulate the import list.
add_import_module(+Module, +Import, +StartOrEnd)
If Import is not already an import module for Module, add it to this list at the start or end depending on StartOrEnd. See also import_module/2 and delete_import_module/2.
delete_import_module(+Module, +Import)
Delete Import from the list of import modules for Module. Fails silently if Import is not in the list.

One usage scenario of import modules is to define a module that is a copy of another, but where one or more predicates have an alternative definition.