module ModuleName() export eseq; local lseq; global gseq; option optseq; description desc; statseq end module
In some circumstances, it may be necessary for module members to "know" what module they belong to. For this reason, you can create a named module, using a slightly modified syntactic form of a module definition. It differs from the ordinary syntax only in the placement of a name between the module keyword and the parentheses that follow it.
Evaluating a named module definition causes, as a side effect, the assignment of the resulting module to the name, and the module name is stored in the attributes of each module member.
Note: This causes the specified name to be protected. Thus, evaluating a global named module definition more than once will generate an error. Evaluating a local definition in separate invocations of a procedure will produce multiple named modules, each with a separate (but identical looking) protected name.
When declaring a local or exported named module, the declaration of the name and module can be combined into a single declaration. The name does not need to be declared separately before associating it with the module definition.
Named modules are also used by the system for some purposes. Every module that is saved to a repository is given a name (that under which it was saved) for use by the persistent store.
The name of a named module, written as a string, can also be used as the first argument to the `module`(...) type. This indicates that the type should only match modules that have the specified name.
moduleMyModule_export⁡e;e ≔ 2end module
Error, (in aModule) attempting to assign to `aModule` which is protected. Try declaring `local aModule`; see ?protect for details.
One reason for introducing named modules is so that the following distinction may be made when printing module member names in certain cases.
UnNamedModule ≔ module_export⁡e2end module:
Module names can be used to check that different module instances were created by some common definition.
make := proc(x)
module Number() export n; end module;
Number:-n := x;
num1 ≔ make⁡2
num1 ≔ moduleNumberexportn;end module
num2 ≔ make⁡3.5
num2 ≔ moduleNumberexportn;end module
Local or exported named modules can be written in the names' declarations.
moduleMmodule_local⁡Lend module;module_export⁡Eend moduleend module:
Download Help Document
What kind of issue would you like to report? (Optional)