//[[Documentation]] *Modules 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. **Name Space 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. **Compile-Time Module Loading ***Syntax Use modulename.Atom Membranes that contain module uses will be supplied with the copies of the rules specified in the corresponding module definitions. ***Example { 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 Loading 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.