在COBOL中,是否可以递归调用一个段落?
In COBOL, is it possible to recursively call a paragraph?
在 IBM 大型机的 COBOL 中是否可以递归调用段落?
200-PARAGRAPH SECTION.
IF WS-COUNTER < 10
ADD 1 TO WS-COUNTER
PERFORM 200-PARAGRAPH
ELSE
DISPLAY 'I'M DONE'
END-IF.
200-EXIT.
EXIT.
检查当前的 COBOL 语言参考,但 AFAIR a para 无法执行自身。措辞类似于你会得到不可预测的结果,因为不支持递归。
如果您需要重写相同的代码,也许您需要重构以使用 PERFORM UNTIL?
@jdv 是正确的。
如果你想要递归,你可以使整个程序递归,查看相同的手册(企业 COBOL 语言参考)和它的姐妹,企业 COBOL 编程指南,特别是在 PROGRAM-ID 及其选项。
但是,如果您没有其他方法,我只会推荐递归,这种情况很少见。递归程序的开销很大。
你显示这个:
200-PARAGRAPH SECTION.
200-PARAGRAPH
位只是一个标签,只是一个名字。 SECTION
这个词告诉你它是什么,它不是一个段落。 中确实有一段 SECTION
.
不,SECTION 也不能递归使用。
PROCEDURE DIVISION 中的 SECTION 过去更为重要。随着 COBOL 1985 标准的各种变化,SECTION 变得不那么重要了。
这就是我的编码方式(根据当地标准):
PERFORM 200-descriptive-and-meaningful-name
invariant-data-item-with-a-VALUE-of-ten
TIMES
DISPLAY "I'M DONE"
200-descriptive-and-meaningful-name.
CONTINUE (just representative of whatever code you need)
.
或者内联执行做同样的事情(我喜欢执行段落,因为它有助于程序的自我记录)。
请注意,名称是为了向阅读本文的您解释。您应该使用对手头的业务任务有意义的不同名称。
语言参考和编程指南是重要的文档,可以免费下载 PDF 或在线搜索。在 SO 之前将这些作为一个呼叫点。也不要忘记你应该有也能提供帮助的同事。
我不确定您展示的代码在技术上是否符合递归的要求。但是,以下代码有效并且与平台无关。
PERFORM
VARYING ws-counter FROM 1 BY 1
UNTIL ws-counter > 9
END-PERFORM.
DISPLAY 'I' QUOTE 'M DONE'.
如果你真的想在 COBOL 程序员之间开战,请阅读此书。
200-SECTION SECTION.
200-PARAGRAPH.
IF ws-counter < 10
ADD 1 TO ws-counter
GO TO 200-PARAGRAPH
ELSE
DISPLAY 'I' QUOTE 'M DONE'
END-IF.
虽然我可能更喜欢这个,但如果要使用 GO TO 方法的话。
200-SECTION SECTION.
200-PARAGRAPH.
IF ws-counter < 10
ADD 1 TO ws-counter
GO TO 200-PARAGRAPH
END-IF.
DISPLAY 'I' QUOTE 'M DONE'.
我必须问一下你想要完成什么?假设您的代码有效,它所做的只是数到十。这做到了,而且更简单。
MOVE 10 TO ws-counter.
DISPLAY 'I' QUOTE 'M DONE'.
我认为这是我会推荐的。
05 ws-counter PIC 9(02).
05 max-passes PIC 9(02) BINARY VALUE 10.
MOVE ZERO TO ws-counter.
PERFORM 200-PARAGRAPH
UNTIL ws-counter >= max-passes.
DISPLAY 'I' QUOTE 'M DONE'.
200-PARAGRAPH.
ADD 1 TO ws-counter.
在 IBM 大型机的 COBOL 中是否可以递归调用段落?
200-PARAGRAPH SECTION.
IF WS-COUNTER < 10
ADD 1 TO WS-COUNTER
PERFORM 200-PARAGRAPH
ELSE
DISPLAY 'I'M DONE'
END-IF.
200-EXIT.
EXIT.
检查当前的 COBOL 语言参考,但 AFAIR a para 无法执行自身。措辞类似于你会得到不可预测的结果,因为不支持递归。
如果您需要重写相同的代码,也许您需要重构以使用 PERFORM UNTIL?
@jdv 是正确的。
如果你想要递归,你可以使整个程序递归,查看相同的手册(企业 COBOL 语言参考)和它的姐妹,企业 COBOL 编程指南,特别是在 PROGRAM-ID 及其选项。
但是,如果您没有其他方法,我只会推荐递归,这种情况很少见。递归程序的开销很大。
你显示这个:
200-PARAGRAPH SECTION.
200-PARAGRAPH
位只是一个标签,只是一个名字。 SECTION
这个词告诉你它是什么,它不是一个段落。 中确实有一段 SECTION
.
不,SECTION 也不能递归使用。
PROCEDURE DIVISION 中的 SECTION 过去更为重要。随着 COBOL 1985 标准的各种变化,SECTION 变得不那么重要了。
这就是我的编码方式(根据当地标准):
PERFORM 200-descriptive-and-meaningful-name
invariant-data-item-with-a-VALUE-of-ten
TIMES
DISPLAY "I'M DONE"
200-descriptive-and-meaningful-name.
CONTINUE (just representative of whatever code you need)
.
或者内联执行做同样的事情(我喜欢执行段落,因为它有助于程序的自我记录)。
请注意,名称是为了向阅读本文的您解释。您应该使用对手头的业务任务有意义的不同名称。
语言参考和编程指南是重要的文档,可以免费下载 PDF 或在线搜索。在 SO 之前将这些作为一个呼叫点。也不要忘记你应该有也能提供帮助的同事。
我不确定您展示的代码在技术上是否符合递归的要求。但是,以下代码有效并且与平台无关。
PERFORM
VARYING ws-counter FROM 1 BY 1
UNTIL ws-counter > 9
END-PERFORM.
DISPLAY 'I' QUOTE 'M DONE'.
如果你真的想在 COBOL 程序员之间开战,请阅读此书。
200-SECTION SECTION.
200-PARAGRAPH.
IF ws-counter < 10
ADD 1 TO ws-counter
GO TO 200-PARAGRAPH
ELSE
DISPLAY 'I' QUOTE 'M DONE'
END-IF.
虽然我可能更喜欢这个,但如果要使用 GO TO 方法的话。
200-SECTION SECTION.
200-PARAGRAPH.
IF ws-counter < 10
ADD 1 TO ws-counter
GO TO 200-PARAGRAPH
END-IF.
DISPLAY 'I' QUOTE 'M DONE'.
我必须问一下你想要完成什么?假设您的代码有效,它所做的只是数到十。这做到了,而且更简单。
MOVE 10 TO ws-counter.
DISPLAY 'I' QUOTE 'M DONE'.
我认为这是我会推荐的。
05 ws-counter PIC 9(02).
05 max-passes PIC 9(02) BINARY VALUE 10.
MOVE ZERO TO ws-counter.
PERFORM 200-PARAGRAPH
UNTIL ws-counter >= max-passes.
DISPLAY 'I' QUOTE 'M DONE'.
200-PARAGRAPH.
ADD 1 TO ws-counter.