プロシージャ参照とは、かっこで囲まれたカンマ区切りの式のリストで構成される引数リストか空の引数リスト () が後ろに記述された参照のことです。値を返すプロシージャ参照を関数参照と呼びます。値を返さないプロシージャ参照をサブルーチン参照と呼びます。
引数リストまたは空の引数リストを指定する場合、参照される名前を PROCEDURE 文のラベル プレフィックスまたは DECLARE 文でエントリとして宣言する必要があります。参照が CALL 文の一部でなければ、参照されるエントリは値を返す必要があります。一方、参照が CALL 文の一部である場合は値を返してはなりません。したがって、値を返すプロシージャは常に関数として呼び出す必要があり、値を返さないプロシージャは常にサブルーチンとして呼び出す必要があります。
エントリとして宣言された名前は、引数リストで参照されているか CALL 文によって呼び出された場合にのみ呼び出されます。パラメーターがない関数は空の引数リストで参照する必要があります。
CALL 文の一部である場合を除き、引数リストなしで記述されたエントリへの参照は、エントリを呼び出す関数参照ではなく、エントリ値への参照となります。
次の例は、さまざまなプロシージャ参照を示したものです。
DECLARE F ENTRY RETURNS(POINTER); DECLARE G ENTRY(FIXED) RETURNS(FLOAT); DECLARE V ENTRY VARIABLE RETURNS(POINTER); DECLARE P POINTER, X FLOAT; . . . P = F(); V = F; X = G(0);
この例では、F() への参照で F が呼び出され、ポインター値が生成されます。F への参照は F のエントリ値への参照であり、エントリ変数 V に割り当てることができます。G への参照もエントリ値への参照であり、G は呼び出されません。G は引数リストを含む参照で呼び出されます。
エントリ変数の配列は、添え字および引数リストを使用して参照できます。この場合、次の例に示すように、引数リストの前に添え字を記述します。
DECLARE E(5) ENTRY(FIXED) VARIABLE RETURNS(POINTER);
E の宣言から、E はエントリ値の配列全体への参照です。E (k) (j) は、E (k) を呼び出して引数 j を渡すポインター値関数参照です。E (k) は、エントリ パラメーターに渡したりエントリ変数に割り当てたりできるエントリ値です。E がパラメーターなしで宣言されている場合、E (k) は空の引数リストを使用して E (k) () として呼び出す必要があります。