home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / modula3 / 1027 < prev    next >
Encoding:
Text File  |  1992-11-12  |  1.3 KB  |  65 lines

  1. Newsgroups: comp.lang.modula3
  2. Path: sparky!uunet!walter!att-out!pacbell.com!ames!haven.umd.edu!decuac!pa.dec.com!src.dec.com!Roger Hoover <rhoover@watson.ibm.com>
  3. From: Roger Hoover <rhoover@watson.ibm.com>
  4. Subject: generics that use generics
  5. To: m3
  6. Message-ID: <9211121955.AA26627@trek.watson.ibm.com>
  7. Cc: rhoover@watson.ibm.com
  8. X-External-Networks: yes
  9. Date: Thu, 12 Nov 92 14:55:54 EST
  10. Lines: 53
  11.  
  12.  
  13. I'd like to write a generic that extends another generic.  For
  14. example, consider the generic List:
  15.  
  16. GENERIC INTERFACE List(El);
  17.  
  18. TYPE T <: REFANY;
  19.  
  20. PROCEDURE RemoveFirst(VAR l: T): El.T;
  21. PROCEDURE InsertFirst(VAR l: T, x: El.T);
  22.  
  23. END List.
  24.  
  25. GENERIC MODULE List(El);
  26.  
  27. REVEAL
  28.   T = BRANDED OBJECT
  29.     el: El.T;
  30.     next: T := NIL;
  31.   END;
  32.  
  33. PROCEDURE RemoveFirst(VAR l: T): El.T =
  34. VAR r: El.T;
  35. BEGIN
  36.   <*ASSERT l # NIL*>
  37.   r := l.el
  38.   l := l.next;
  39.   RETURN r
  40. END RemoveFirst;
  41.  
  42. PROCEDURE InsertFirst(VAR l: T, x: El.T) =
  43. BEGIN
  44.   l := NEW(T, el := x, next := l)
  45. END InsertFirst;
  46.  
  47. END List.
  48.  
  49. I'd like to create a generic Stack that uses List:
  50. GENERIC INTERFACE Stack(El);
  51.  
  52. TYPE T <: REFANY;
  53.  
  54. PROCEDURE Pop(VAR l: T): El.T;
  55. PROCEDURE Push(VAR l: T, x: El.T);
  56.  
  57. END Stack.
  58.  
  59. Is there any way to write GENERIC MODULE Stack(El) using the
  60. List.RemoveFirst procedure for Pop and ListInsertFirst for
  61. Push?
  62.  
  63. roger
  64. rhoover@watson.ibm.com
  65.