Skip to content

14.2.9 Macro Loops ​

宏的主体可以包含两种形式的循环:遍历数值范围的循环和遍历记号的循环。两种形式都会多次展开_循环体_(loop body),每次将一个命名的_循环变量_(loop variable)设置为不同的值。循环体通常至少展开该循环变量一次。

MITERATE 设置(参见 SET MITERATE)限制循环中的迭代次数。这是一种确保宏展开终止的安全措施。当超过 MITERATE 限制时,PSPP 会发出警告。

Loops Over Ranges ​

!DO !var = start !TO end [!BY step]
  body
!DOEND

遍历数值范围的循环采用如上所示的形式。start、end 和 step(如果包含)必须是具有数值的表达式。宏处理器接受整数和实数。宏处理器对从 start 到 end(含)的每个数值展开 body。

step 的默认值为 1。如果 step 为正且 first > last,或者 step 为负且 first < last,则宏处理器根本不展开 body。step 不能为零。

Loops Over Tokens ​

!DO !var !IN (expression)
  body
!DOEND

遍历记号的循环采用如上所示的形式。宏处理器求值 expression,并对结果中的每个记号展开 body 一次,每次出现时将记号替换 !var。

基于 GNU PSPP 2.0.1 手册与入门教程整理