Listing: 1 MODULE PList; 2 TYPE Node = RECORD val : INTEGER; next : POINTER TO Node END; 3 TYPE PNode = POINTER TO Node; 4 VAR head : PNode; ExitCode : INTEGER; 5 PROCEDURE Append(v : INTEGER); 6 VAR q, r : PNode; 7 BEGIN 8 NEW(q); 9 q^.val := v; 10 q^.next := NIL; 11 IF head = NIL THEN 12 head := q 13 ELSE 14 r := head; 15 WHILE r^.next # NIL DO 16 r := r^.next 17 END; 18 r^.next := q 19 END 20 END Append; 21 PROCEDURE Sum(p : PNode) : INTEGER; 22 BEGIN 23 IF p = NIL THEN 24 RETURN 0 25 ELSE 26 RETURN p^.val + Sum(p^.next) 27 END 28 END Sum; 29 BEGIN 30 head := NIL; 31 Append(5); 32 Append(7); 33 Append(9); 34 ExitCode := Sum(head) 35 END PList. 0 errors