- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
[[Documentation]]
*Modules
This section is subject to modification.
**Name Spaces
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, no syntax exists to prohibit a programmer from writing arbitrary qualified names, and, moreover, no syntax exists to abbreviate the module name part of 'exported' names.
Currently, we have no means to prohibit 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
Definition
{ module(modulename), Process }
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 referred module. When module m needs to be looked up, the file ${LMNTAL_ROOT}/lmntal_lib/m.lmn is loaded, compiled and linked before the execution of the user program starts, where ${LMNTAL_ROOT} is the directory lmntal.jar is located at.
Link-time module lookup is performed when the source file does not contain the definition of a referred 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 directory lmntal.jar is located at.