home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OL.LZH / PROCS.LZH / TBLSET.ICN < prev    next >
Text File  |  1991-07-13  |  2KB  |  70 lines

  1. ############################################################################
  2. #
  3. #   Name:   tblset.icn
  4. #
  5. #   Title:  Procedures for set-theoretic table manipulation, treating
  6. #           tables as set-theoretic functions.
  7. #
  8. #   Author: Alan Beale
  9. #
  10. #   Date:   March 31, 1990
  11. #
  12. ############################################################################
  13. #
  14. #     These procedures are defined:
  15. #
  16. #     pairset(t)    Convert the table t to an equivalent set of ordered pairs
  17. #
  18. #     domain(t)     Return the domain of the function defined by the table t
  19. #
  20. #     range(t)      Return the range of the function defined by the table t
  21. #
  22. #     inverse(t)    Return the functional inverse of the function defined
  23. #                   by the table t
  24. #
  25. #     inverse(t,[]) Return the relational inverse of the function defined
  26. #                   by the table t.
  27. #
  28. #     inverse(t, set([])) The same as the previous, except that each
  29. #                   table member is a set rather than a list.
  30. #
  31. ############################################################################
  32.  
  33. procedure pairset(Table)
  34.     return set(sort(Table))
  35. end
  36.  
  37. procedure domain(Table)
  38.     local dom
  39.  
  40.     dom := set([])
  41.     every insert(dom, key(Table))
  42.     return dom
  43. end
  44.  
  45. procedure range(Table)
  46.     local ran
  47.  
  48.     ran := set([])
  49.     every insert(ran, !Table)
  50.     return ran
  51. end
  52.  
  53. procedure inverse(Table, Default)
  54.     local inv, delem, relem
  55.  
  56.     inv := table(Default)
  57.     every delem := key(Table) do {
  58.         if type(Default) == "list" then
  59.           if member(inv, relem := Table[delem]) then
  60.             put(inv[relem], delem)
  61.           else inv[relem] := [delem]
  62.         else if type(Default) == "set" then
  63.           if member(inv, relem := Table[delem]) then
  64.             insert(inv[relem], delem)
  65.           else inv[relem] := set([delem])
  66.         else inv[Table[delem]] := delem
  67.     }
  68.     return inv
  69. end
  70.