函数 ord 有时有效但有时无效

Function ord works only sometimes but sometimes not

我正在尝试在 Cobol 中编写某种 Caesar Cipher。但不知何故我得到以下编译错误:

Numeric function "INTEGER FUNCTION ORD" was not allowed in this context.

这里会触发此错误(两行)

 000048                  MOVE FUNCTION ORD("A") TO a
 000049                  display function ord("A")

但是这里没有

 000054                MOVE FUNCTION CHAR(FUNCTION MOD(
 000055                    FUNCTION ORD(outstring (i:1))
 000056                        - a + offset, 26) + a)
 000057                TO outstring (i:1)

i就是我们正在看的outstring的位置。 a 是确保我们留在 26 个字母中所需的 "a""A" 的值,定义为

 000018            03 a    pic S9(3).

哪里不一样了?为什么第二个有效而第一个无效?

第二个示例有效,而第一个示例无效,因为您可以将数值表达式作为函数参数,但不能将数值表达式作为 MOVE 语句的主题。在您的情况下,您的编译器 (IBM?) 将数字内部函数调用视为数字表达式。因此,您需要将 MOVE 替换为 COMPUTE,并将 DISPLAY 中的函数调用更改为 a

000048                  COMPUTE a = FUNCTION ORD("A")
000049                  DISPLAY a