ECLiPSe provides a general mechanism to perform macro expansion of Prolog terms. Macro expansion can be performed in 3 situations:
In addition to transforming a term, macros can also be source annotation aware, and provide source annotation information for the transformed term if supplied with source annotation information for the orginal term. Source annotation information provide source and position information for a term, and is provided by predicate such as read_annotated/3.
Macros are attached to classes of terms specified by their functors or by their type. Macros obey the module system’s visibility rules. They may be either local or exported. The macro expansion is performed by a user-defined Prolog predicate.