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, some of which 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 do not 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.
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 basic list-processing predicates from the library and make them available.