3 ms·
FORTRAN had both functions and subroutines. A function returned a value and was invoked in an expression (eg. S=SIN(A)). A subroutine was invoked by calling it
by bregma 1y ago
FORTRAN had both functions and subroutines. A function returned a value and was invoked in an expression (eg. S=SIN(A)). A subroutine was invoked by calling it (eg. CALL FOPEN(FNAME, PERMS)).
- kragen 1y agoI should probably just Google this, but how did you define the functions?
- bregma 1y agoC -------- START OF FUNCTION ------- INTEGER FUNCTION INCREMENT(I) INCREMENT=I+1 RETURN END C -------- END OF FUNCTION -------
- kps 1y agoFORTRAN also had single-expression function definitions, e.g. ARGF(X, Y, Z) = (D/E) * Z+ X** F+ Y/G Naturally this is syntactically identical to an array element assignment, which is one of the many things that made compiling FORTRAN so much fun.
- kragen 1y agoYeah, that's also almost exactly the same as the Algol-58 syntax for defining such functions. And BASIC, except you had to say DEF FNF(X, Y, Z) = (D/E) * Z+ X** F+ Y/G and the function name had to start with FN.
- pklausler 1y agos/had/has/ In the flang-new compiler, which builds a parse tree for the whole source file before processing any declarations, it was necessary to parse such things as statement functions initially so that further specification statements could follow them. Later, if it turns out that the function name is an array or regular function returning a pointer, the parse tree gets patched up in place and the statement becomes the first executable statement.