MODULE PList; TYPE Node = RECORD val : INTEGER; next : POINTER TO Node END; TYPE PNode = POINTER TO Node; VAR head : PNode; ExitCode : INTEGER; PROCEDURE Append(v : INTEGER); VAR q, r : PNode; BEGIN NEW(q); q^.val := v; q^.next := NIL; IF head = NIL THEN head := q ELSE r := head; WHILE r^.next # NIL DO r := r^.next END; r^.next := q END END Append; PROCEDURE Sum(p : PNode) : INTEGER; BEGIN IF p = NIL THEN RETURN 0 ELSE RETURN p^.val + Sum(p^.next) END END Sum; BEGIN head := NIL; Append(5); Append(7); Append(9); ExitCode := Sum(head) END PList.