在IBM Mainframe的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.
答案 0 :(得分:5)
检查当前的COBOL语言参考,但AFAIR para不能自行执行。措辞就像你会得到不可预测的结果,因为不支持递归。
如果您需要查看相同的代码,可能需要重构使用PERFORM UNTIL吗?
答案 1 :(得分:4)
@jdv是正确的。
如果你想要递归,你可以使整个程序递归,查看相同的手册(企业COBOL语言参考)和它的姐妹,企业COBOL编程指南,特别是在PROGRAM-ID及其选项。
但是,如果你没有其他办法,我只推荐递归,这种情况很少见。使用递归程序会产生很大的开销。
你表现出来:
200-PARAGRAPH SECTION.
200-PARAGRAPH
位只是一个标签,只是一个名称。单词SECTION
告诉你它是什么,它不是一个段落。您的 中的段落<{1}}。
而且,不能以递归方式使用SECTION。
程序部门的部分过去比较重要。随着COBOL 1985标准的各种变化,SECTION变得不那么重要了。
这就是我编码的方式(符合当地标准):
SECTION
或者内联执行同样的事情(我喜欢执行段落,因为它有助于程序的自我记录)。
请注意,这些名称是为您解释的。您应该使用对手头的业务任务有意义的不同名称。
“语言参考和编程指南”是大量文档,可以免费下载或下载或在线搜索。在SO之前制作这些一个通话点。另外不要忘记你应该有同事也可以提供帮助。
答案 2 :(得分:1)
我不确定您在技术上显示的代码是否有资格作为递归。但是,以下代码可以运行并且与平台无关。
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.