1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
MODULE Lists; (*** declare global constants, types and variables ***) TYPE List* = POINTER TO ListNode; ListNode = RECORD value : INTEGER; next : List; END; (*** declare procedures ***) PROCEDURE (VAR list: List) add* (val : INTEGER); BEGIN IF list = NIL THEN NEW(list); (* create record instance *) list.value := val; ELSE list.next.add(val); (* recursive call to .add *) END END add; END Lists.