The POPR statement (PROCEDURE_OPERATOR, PROC_OPR, POPERATOR)
This statement has the syntax of the OPERATOR statement, but additionally incorporates the available options of the XOPR statement, just as PSUB combines SUBROUTINE with XSUB.
Several special entities can appear in the argument lists of functions and subroutines. It is possible, for example, to pass a subroutine or function as an argument to another subroutine or function.
To ensure that, when a subprogram's name appears in a calling sequence, it is not misinterpreted as the name of a simple variable, the subprogram's name must be declared in an RNAME statement (similar to the EXTERNAL statement in FORTRAN; FALCON also has a statement with the keyword EXTERNAL, but this statement has a different meaning).
Declaring the position in the argument list SUBROUTINE will not solve the problem, as the name in the argument list will then be interpreted as a SUBPROGRAM variable rather than the name of a subprogram.
If, instead of a subroutine, a sequence (that is, a series of statements enclosed by parentheses) appears in an argument position, that sequence acts as a SUBROUTINE-valued constant, which, like an ENTRY, can use variables belonging to the program in which it is contained. The RETURN at the end of the sequence need not be explicitly present, but other RETURNs are allowed.
Also, along with the special argument decoding types EQUATE, TEXT, and LIST_EQUATE, there is an argument type EXPRESSION which causes an expression to be interpreted as the definition of a function (however, the function thus created has no arguments, as none of the expression's variables are considered to be dummy variables).