A module is a set of rules packaged in a membrane with a module name definition.
Definition { module(modulename), RuleSet }
The RuleSet takes effect only when it is copied or loaded outside the membrane. The module mechanism of LMNtal provides a loading mechanism of modules.
A single-level global name space is available for the names of atoms. An atom name p can be qualified with a module name m. The resulting qualified atom name m.p can be referred to globally.
Currently, we have no means to prevent a programmer from writing arbitrary qualified names, and we have no means to abbreviate the module name part of 'exported' names.
Use modulename.Atom
Membranes that contain module uses will be supplied with the copies of the rules specified in the corresponding module definitions.
{ module(acc). acc.add(A), acc.value(N) :- acc.value(A+N). acc.get(Res), acc.value(N) :- int(N) | Res=N, acc.value(N). acc.new :- acc.value(0) }. { acc.new, acc.add(3), acc.add(4), acc.get(N) }
Link-time module lookup is performed when the source file does not contain the definition of a referenced module. When module m needs to be looked up, the file $LMNTAL_HOME/lib/src/m.lmn is loaded, compiled and linked before the execution of the user program starts, where $LMNTAL_HOME is the root directory of LMNtal.