I’m new to COBOL and GnuCOBOL (in Windows).
I'm trying to write a recursive function with a tail, but the program does not return values it would be possible to help me. I wonder if what I want is possible in language?
Follows function code
IDENTIFICATION DIVISION.
FUNCTION-ID. FATBASE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION ALL INTRINSIC.
DATA DIVISION.
LOCAL-STORAGE SECTION.
77 LS-NUM PIC 99.
77 LS-PAR PIC 99.
LINKAGE SECTION.
77 LK-NUM PIC 99.
77 LK-PAR PIC 99.
77 LK-FAT PIC 9(33).
PROCEDURE DIVISION USING BY VALUE LK-NUM, LK-PAR
RETURNING LK-FAT.
IF NUMVAL(LK-NUM) = 0
COMPUTE LK-FAT = NUMVAL(LK-PAR)
ELSE
COMPUTE LS-NUM = LK-NUM - 1
COMPUTE LS-PAR = LK-NUM * NUMVAL(LK-PAR)
COMPUTE LK-FAT = NUMVAL(FATBASE(LS-NUM, LS-PAR))
END-IF
GOBACK.
END FUNCTION FATBASE.
Follows code of the program that calls the function
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTEFAT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION FATBASE
FUNCTION ALL INTRINSIC.
DATA DIVISION.
LOCAL-STORAGE SECTION.
77 LS-NUM PIC 99.
77 LS-FAT PIC Z(33).
PROCEDURE DIVISION.
ACCEPT LS-NUM.
MOVE FATBASE(LS-NUM, 1) TO LS-FAT
DISPLAY FATBASE(LS-NUM, 1)
STOP RUN.
As for the IF/THEN command, these are working properly. The problem is occurring with the COMPUTE commands. The lines with COMPUTE do not seem to be having the expected calculation effect. It seems that only the LS-NUM and LK-NUM variable have any value. The other variables are zeroed during processing.
IF NUMVAL(LK-NUM) = 0
COMPUTE LK-FAT = NUMVAL(LK-PAR)
ELSE
COMPUTE LS-NUM = LK-NUM - 1
COMPUTE LS-PAR = LK-NUM * NUMVAL(LK-PAR)
COMPUTE LK-FAT = NUMVAL(FATBASE(LS-NUM, LS-PAR))
END-IF
In advance thanks for any help.
The programs are attached.
Best regards.
===========================================================================
At the end of the day after this post I got external help - available at: https://sourceforge.net/p/open-cobol/discussion/cobol/thread/54637a961a/?limit=250#313c/7037/dbaf/3684