在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.
在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语言参考资料,但据我所记,一个段落不能执行自己。措辞大致是这样的:你将会得到不可预测的结果,因为不支持递归。
如果您需要反复运行相同的代码,也许重构以使用PERFORM UNTIL是您需要的?
@jdv 是正确的。
如果您需要递归,可以将整个程序变成递归,查看相同的手册(Enterprise COBOL语言参考)以及它的姊妹篇,Enterprise COBOL编程指南,特别是PROGRAM-ID及其选项。
然而,我只建议在没有其他方法时使用递归,这很少见。递归程序会有大量开销。
您展示了这个:
200-PARAGRAPH 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)
.
或者使用内联执行相同的操作(我喜欢将段落作为PERFORM,因为它有助于程序的自我记录)。
请注意,这些名称是为了向您阅读此文档的人解释。您应该使用与手头业务任务相关的不同名称。
语言参考和编程指南是实质性的文档,可免费下载为PDF文件,或在线搜索。在寻求帮助之前,请先查看这些文档。还要记得您应该有可以提供帮助的同事。
我不确定你展示的代码在技术上是否符合递归的定义。然而,以下代码可以正常运行且具有跨平台性。
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.
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.
PERFORM 10 TIMES ADD 1 TO ws-counter END-PERFORM DISPLAY "I'M DONE"
是你上一个中间步骤的延伸 :-) 当然,在此之前要加上INITIALIZE ws-counter。 - Bill Woodger