Operators (section 4.24) are
local to modules, where the initial table behaves as if it is copied
from the module user (see
section 5.10). A specific
operator can be disabled inside a module using :- op(0, Type,
Name). Inheritance from the public table can be restored using :-
op(-1, Type, Name).
In addition to using the op/3
directive, operators can be declared in the module/2
directive as shown below. Such operator declarations are visible inside
the module, and importing such a module makes the operators visible in
the target module. Exporting operators is typically used by modules that
implement sub-languages such as chr (see
chapter 7). The example below is
copied from the library
library(clpfd).
:- module(clpfd,
[ op(760, yfx, #<==>),
op(750, xfy, #==>),
op(750, yfx, #<==),
op(740, yfx, #\/),
...
(#<==>)/2,
(#==>)/2,
(#<==)/2,
(#\/)/2,
...
]).