表达式运算符

有几种类型的操作:

一元操作
通过指定后跟一个操作数的运算符对一元运算进行编码。 一元运算符为:
+
一元加号操作维护数字操作数的值。
-
一元减运算对数字操作数的值求反。 例如,如果 NUMBER 具有值 123.4-NUMBER 的值为 -123.4
如果指示符操作数的值为 "0" ,那么逻辑否定操作将返回 "1"; 如果指示符操作数为 "1" ,那么将返回 "0"。 请注意,任何比较操作或操作 ANDOR 的结果都是类型指示符的值。
二进制操作
通过指定两个操作数之间的运算符对二进制操作进行编码。 二进制运算符为:
+
此操作的含义取决于操作数的类型。 它可用于:
  1. 添加两个数字值
  2. 向日期,时间或时间戳记添加持续时间。
  3. 并置两个字符,两个图形或两个 UCS-2 值
    注: 有关 CHARCOUNT 方式如何影响并置的信息,请参阅 具有不同字符大小的数据的并置
  4. 向基指针添加数字偏移
  5. 组合日期和时间以生成时间戳记
-
此操作的含义取决于操作数的类型。 它可用于:
  1. 减去两个数字值
  2. 从日期,时间或时间戳记中减去持续时间。
  3. 从基指针中减去数字偏移量
  4. 减去两个指针
*
乘法运算用于将两个数字值相乘。
/
除法操作用于除两个数字值。
**
指数运算用于将一个数提升到另一个数的幂。 例如, 2**3 的值为 8
=
如果两个操作数相等,那么等同性运算将返回 "1"; 如果两个操作数不相等,那么返回 "0"。
<>
如果两个操作数相等,那么不等式运算返回 "0"; 如果不相等,那么返回 "1"。
>
如果第一个操作数大于第二个操作数,那么大于运算将返回 "1"。
>=
如果第一个操作数大于或等于第二个操作数,那么大于或等于运算将返回 "1"。
<
如果第一个操作数小于第二个操作数,那么小于运算将返回 "1"。
<=
如果第一个操作数小于或等于第二个操作数,那么小于或等于运算将返回 "1"。
如果两个操作数都具有指示符 "1" 的值,那么逻辑和操作将返回 "1"。
OR
如果任一操作数具有指示符 "1" 的值,那么逻辑或操作将返回 "1"。
IN
如果第一个操作数等于第二个操作数的元素,或者如果第一个操作数在第二个操作数指定的范围内,那么 IN 操作将返回 "1"。
分配操作
赋值操作通过指定赋值的目标,后跟赋值运算符,后跟要赋给目标的表达式来进行编码。 使用目标作为操作的其中一个操作数,形式为 op= (例如 + =) 的复合赋值运算符将赋值与另一个操作组合在一起。 = 赋值运算符与 EVAL 和 EVALR 操作配合使用。 op= 复合分配运算符仅与 EVAL 操作配合使用。 赋值运算符为:
  • = 将表达式分配给目标
  • + = 将表达式添加到目标
  • -= 从目标中减去表达式
  • * = 目标乘以表达式
  • /= 目标除以表达式
  • ** = 为目标分配表达式幂的目标
内置函数
内置函数在 内置函数中进行讨论。
用户定义的函数
任何返回值的原型过程都可以在表达式中使用。 可以将对该过程的调用放在将使用与该过程的返回值类型相同的值的任何位置。 例如,假定过程 MYFUNC 返回字符值。 以下显示了对 MYFUNC的三个调用:
图 1。 在表达式中使用 "生产过程"
 *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
 /FREE
      if  MyFunc (string1) = %trim (MyFunc (string2));
          %subst(X(3))= MyFunc('abc');
      endif;
 /END-FREE

有关用户定义的函数的更多信息,请参阅 子过程和子例程