位置参数 (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 命令上。