位置参数 (DEFINE-!ENDDEFINE 命令)
必须按照在宏调用上指定位置参数的顺序来定义位置参数。 在宏主体中,第一个位置自变量由 !1引用,定义的第二个位置自变量由 !2引用,依此类推。 同样,宏调用中第一个自变量的值将分配给 !1,第二个自变量的值将分配给 !2,依此类推。
- 可以通过指定
!* 在宏主体中统称位置参数。!* 规范将自变量并置,以空格分隔各个自变量。
示例
DATA LIST FILE='/data/mac.txt' / V1 1-2 V2 4-5 V3 7-8.
* Macro definition.
DEFINE macdef (!POS !TOKENS(1)
/!POS !TOKENS(1)
/!POS !TOKENS(1))
frequencies variables = !1 !2 !3.
!ENDDEFINE.
* Macro call.
macdef V1 V2 V3.
macdef V3 V1 V2.
- 定义了三个位置参数,每个参数都有一个标记。 第一个位置参数由
FREQUENCIES命令上的!1引用,第二个由!2引用,第三个由!3引用。 - 当第一次调用扩展宏时,第一个位置自变量 (
!1) 被分配值V1,第二个位置自变量 (!2) 被分配值V2,第三个位置自变量 (!3) 被分配值V3。 - 在第二次调用中,第一个位置自变量被分配值
V3,第二个位置自变量被分配值V1,第三个位置自变量被分配值V2。
示例
DEFINE macdef (!POS !TOKENS(3))
frequencies variables = !1.
!ENDDEFINE.
macdef V1 V2 V3.
- 此示例与前一个示例相同,只是它将三个令牌分配给一个自变量,而不是将一个令牌分配给三个自变量中的每个自变量。 结果是相同的。
示例
DEFINE macdef (!POS !TOKENS(1)
/!POS !TOKENS(1)
/!POS !TOKENS(1)
frequencies variables = !*.
!ENDDEFINE.
macdef V1 V2 V3.
- 这是实现前两个示例中显示的宏扩展的第三个替代方法。 它指定了三个自变量,但随后使用符号
!* 将它们全部连接到一个FREQUENCIES命令上。