Each predicate in a program is identified by its module, as well as by its name and arity.
A module defines a set of predicates, among which some have the property of being public. Public predicates are predicates that can be imported by other modules, which means that they can then be called from within those modules. Predicates that are not public are private to the module in which they are defined; that is, they cannot be called from outside that module (except by explicitly overriding the modularity rules as described in ref-mod-vis).
There are two kinds of importation:
Built-in predicates don’t need to be imported; they are automatically available from within any module.
There is a special module called
user, which is used by default when
predicates are being defined and no other module has been specified.
The other predefined module is the
where all the built-in predicates reside. The exported
built-in predicates are automatically imported into each new
module as it is created.
If you are using a program written by someone else, you need not be
concerned as to whether or not that program has been made into a module.
The act of loading a module from a file using
ensure_loaded/1 (see ref-lod) will automatically import
all the public predicates in that module. Thus the command
will load the list-processing predicates from the library and make them available.