Any ECLiPSe
built-in predicate can be redefined (i.e. hidden by
a local predicate of the same name, cf. ) by the user.
To remind the user of what is happening, a warning is given if the
redefinition is done by just defining a new predicate of the same name.
To avoid the warning and to clarify the meaning, an explicit
local/1 declaration should be provided for the builtin that is to be
redefined.
Some builtins are classified as protected (see Appendix ).
Anyway, this does not mean that they can not be redefined.
They just require the explicit local/1 declaration to appear in the
source before any occurrence as a subgoal.
The same is true for redefining existing predicates with predicates that
use a different calling convention (this is signaled by the "inconsistent
redefinition" error).
Different calling convention are used for normal Prolog
predicates, for C externals and for Prolog tool predicates.