up previous next
3.9.7 More Examples of Packages
Here is a simple package for printing lists.

Example
  Package $contrib/list

  Define About()
    Return "
      Author: Antonio
      Version: 1.0
      Date: 18 July 1997
    "
  EndDefine;
  
  Define PrintList(L)
    Foreach X In L Do
      PrintLn X
    EndForeach
  EndDefine;
  
  EndPackage;
Here is another package that takes a pair of objects and turns the pair into a list. Note the local alias used to reference the previous package.

Example
  Package $contrib/pair
  
  Alias L := $contrib/list; -- Local alias for another package.
                            -- This alias does not affect global
                            -- aliases.
  Define Make(A, B)
    Return [A, B];
  EndDefine;
  
  Define First(P)
    Return P[1];
  EndDefine;
  
  Define Second(P)
    Return P[2];
  EndDefine;
  
  Define PrintPairOfLists(P)
    PrintLn "First list:";
    L.PrintList($.First(P));  -- The local alias, L, is used here,
    PrintLn "Second list:";
    L.PrintList($.Second(P))  -- and here.  $ refers to a function
  EndDefine;                  -- defined in the current package.
  
  EndPackage;
USING THE PACKAGES. After reading in the packages using Source one may proceed as follows to use them:

Example
  Alias P := $contrib/pair;
  X := P.Make([x^2,x],[x,y,z]);
  P.PrintPairOfLists(X);
First list:
x^2
x
Second list:
x
y
z
-------------------------------
Note: suppose a package with identifier $contrib/newlist prints lists in another format. To switch to this format in $contrib/pair, one need only change the alias for L from $contrib/list to $contrib/newlist.