The following extension to the DEFINE declaration is available when using the compile-time facility.
<definition>
──<identifier>─┬──────────────────────┬─┬─ = ──┬─<compile-time text>─┬─┤
├─<formal symbol part>─┘ └─ := ─┘ │
└─ :=: ──<compile-time arithmetic expression>─────────┘
If a DEFINE identifier is declared using the assignment operator (:=), the compile-time text is evaluated in the same manner as using the (=) syntax. This is not the preferred usage and is provided for compatibility reasons. If a DEFINE identifier is declared using the swap operator (:=:), then the compile-time arithmetic expression is evaluated once at the time of, and in the scope of, the DEFINE declaration. Otherwise, the compile-time items in the compile-time text are evaluated on each invocation of the define identifier.
Compile-time text does not include the compile-time DEFINE statement, when used as the definition in a DEFINE declaration. A compile-time DEFINE statement cannot be embedded within an ordinary DEFINE declaration.
When a DEFINE declaration contains another DEFINE declaration, the formal parameters to the outer DEFINE cannot be used as <identifier> or <number identifier> components of the compile-time identifier.

