58 lines
1.5 KiB
Plaintext
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.
|