p_list.mod 612 B

1234567891011121314151617181920212223242526272829303132333435
  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.