The following ALGOL programs invoke each other. The first program is the client program.
BEGIN LIBRARY L(TITLE=“OBJECT/MYLIB1”); PROCEDURE PLIB1_A (R); VALUE R; REAL R; LIBRARY L; REAL X; ....... PLIB1_A (X); ....... END.
The second program (MYLIB1) is a library that uses another library.
BEGIN LIBRARY L(TITLE=“OBJECT/MYLIB2”); REAL PROCEDURE PLIB2_A (R); VALUE R; REAL R; LIBRARY L; REAL PROCEDURE PLIB1_A (R); VALUE R; REAL R; BEGIN ....... PLIB1_A:= PLIB2_A (R); %% Invokes a procedure in MYLIB2. END; PROCEDURE PLIB1_B (P1, P2); VALUE P1; REAL P1, P2; BEGIN ....... END; EXPORT PLIB1_A, PLIB1_B; FREEZE(TEMPORARY); END.
The third program (MYLIB2) is a library that uses another library (MYLIB1).
BEGIN LIBRARY L(TITLE=“OBJECT/MYLIB1”); REAL PROCEDURE PLIB1_B (A, B); VALUE A; REAL A, B; LIBRARY L; REAL PROCEDURE PLIB2_A (R); VALUE R; REAL R; BEGIN REAL X, Y; ....... PLIB1_B (X, Y) %% Procedure in MYLIB1; circular linkage ....... %% is allowed, because MYLIB1 is frozen. PLIB2_A:=Y; END; BOOLEAN PROCEDURE PLIB2_B (X); VALUE X; REAL X; BEGIN ....... END; EXPORT PLIB2_A, PLIB2_B; FREEZE(TEMPORARY); END.

