SuivantPrec.Bas prec.BasNiv. sup.

9.10 FUNCTION Statement 

The FUNCTION statement must be the first statement of every external function. Its general form is:        type FUNCTION( dummy1, dummy2, ... dummyN ) The type specification is optional: if it is omitted then the type of the result is determined by the usual rules. The function name may have its type specified by a type or IMPLICIT statement which appears later in the program unit. If the function is of type character then the length may be specified by a literal constant (but not a named constant) or may be given in the form CHARACTER*(*) in which case the length will be passed in as the length declared for the function name in the calling program unit.

There may be any number of dummy arguments including none, but the parentheses must still be present. Dummy arguments may, as described in section 9.4, be variables, arrays, or procedures.

The function name may be used as a variable within the function subprogram unit; a value must be assigned to this variable before the procedure returns control to the calling unit. If the function name used the passed-length option then the corresponding variable cannot be used as an operand of the concatenation operator except in an assignment statement. The passed-length option is less useful for character functions than for arguments because the length is inevitably the same for all references from the same program unit. For example:
        PROGRAM FLEX
        CHARACTER CODE*8, CLASS*6, TITLE*16
        CLASS = CODE('SECRET')
        TITLE = CODE('ORDER OF BATTLE')
        END
 
        CHARACTER*(*) FUNCTION CODE(WORD)
        CHARACTER WORD*(*), BUFFER*80
        DO 15, K = 1,LEN(WORD)
             BUFFER(K:K) = CHAR(ICHAR(WORD(K:K) + 1)
 15     CONTINUE
        CODE = BUFFER
        END
Unfortunately, although this function can take in an argument of any length up to 80 characters long and encode it, it can only return a result of exactly 8 characters long when called from the program FLEX, so that it will not produce the desired result when provided with the longer character string. This limitation could be overcome with the use of a subroutine with a second passed-length argument to handle the returned value.

Functions without arguments do not have a wide range of uses but applications for them do occur up from time to time, for example when generating random numbers or reading values from an input file. For example:
        PROGRAM COPY
        REAL NEXT
        DO 10,I = 1,100
              WRITE(UNIT=*,FMT=*) NEXT()
 10     CONTINUE
        END
 
        REAL FUNCTION NEXT()
        READ(UNIT=*,FMT=*) NEXT
        END
The parentheses are needed on the function call to distinguish it from a variable. The function statement itself also has to have the empty pair of parentheses, presumably to match the call.

SuivantPrec.Bas prec.HautNiv. sup.