RosettaCodeData/Task/Nested-function/Simula/nested-function.simula

58 lines
1.5 KiB
Plaintext

COMMENT CLASS SIMSET IS SIMULA'S STANDARD LINKED LIST DATA TYPE
CLASS HEAD IS THE LIST ITSELF
CLASS LINK IS THE ELEMENT OF A LIST
PROCEDURE IS THE TERM USED FOR FUNCTIONS IN SIMULA
TEXT IS THE TERM USED FOR STRINGS IN SIMULA ;
SIMSET
BEGIN
LINK CLASS ITEM(TXT); TEXT TXT;;
COMMENT CREATING THE LIST AS A WHOLE WITH THE SEPARATOR ". "
GIVEN AS AN ARGUMENT;
REF(HEAD) PROCEDURE MAKELIST(SEPARATOR); TEXT SEPARATOR;
BEGIN
COMMENT VARIABLE TO KEEP TRACK OF THE ITEM NUMBER ;
INTEGER COUNTER;
COMMENT THIS IS THE NESTED FUNCTION ;
REF(ITEM) PROCEDURE MAKEITEM(TXT); TEXT TXT;
BEGIN
TEXT NUM;
TEXT ITEMTEXT;
COMMENT CONVERT NUMBER TO STRING ;
NUM :- BLANKS(5);
NUM.PUTINT(COUNTER);
COMMENT ACCESS SEPARATOR AND MODIFY COUNTER;
COUNTER := COUNTER + 1;
ITEMTEXT :- NUM & SEPARATOR & TXT;
MAKEITEM :- NEW ITEM(ITEMTEXT);
END MAKEITEM;
REF(HEAD) HD;
HD :- NEW HEAD;
COUNTER := 1;
MAKEITEM("FIRST").INTO(HD);
MAKEITEM("SECOND").INTO(HD);
MAKEITEM("THIRD").INTO(HD);
MAKELIST :- HD;
END MAKELIST;
REF(HEAD) LIST;
REF(ITEM) IT;
LIST :- MAKELIST(". ");
COMMENT NAVIGATE THROUGH THE LIST ;
IT :- LIST.FIRST;
WHILE IT =/= NONE DO
BEGIN
OUTTEXT(IT.TXT);
OUTIMAGE;
IT :- IT.SUC;
END;
END.