DIRECTORY List, Set; SetImpl: CEDAR PROGRAM IMPORTS List EXPORTS Set = BEGIN OPEN Set; New: PUBLIC PROC [] RETURNS [Handle] ={ RETURN [NEW[HandleRec _ [NIL]]] }; --Create Put: PUBLIC PROC[han: Handle, e: REF ANY] RETURNS [BOOL] ={ IF ~List.Memb[e, han.elements] THEN han.elements _ CONS[e, han.elements]; RETURN[~List.Memb[e, han.elements]] };-- Put Enumerate: PUBLIC PROC[han: Handle, action: EachEltAction] RETURNS [stop: BOOL _ FALSE] ={ FOR list: LIST OF REF ANY _ han.elements, list.rest UNTIL stop OR list = NIL DO stop _ action[list.first] ENDLOOP; };--Enumerate Cardinality: PUBLIC PROC[han: Handle] RETURNS [NAT] ={ RETURN [NAT [List.Length[han.elements]]] };--Cardinality Nth: PUBLIC PROC[han: Handle, n: NAT] RETURNS [REF ANY] ={ RETURN [List.NthElement[han.elements, n]] };--Nth Difference: PUBLIC PROC[han1, han2: Handle] RETURNS [Handle] ={ RETURN [NEW[HandleRec _ [List.ListDifference[han1.elements, han2.elements]]]] };--Difference Remove: PUBLIC PROC[han: Handle, e: REF ANY] RETURNS [BOOL] ={ val: BOOL _ List.Memb[e, han.elements]; han.elements _ List.Remove[e, han.elements]; RETURN [val] };--Remove In: PUBLIC PROC[han: Handle, e: REF ANY] RETURNS [BOOL] ={ RETURN [List.Memb[e, han.elements]] };--In END. x--File: SetImpl.mesa Last Edited by: CSChow, January 28, 1985 2:34:40 am PST Preas, August 2, 1986 8:15:49 pm PDT Κ|˜J™™7Icode™$—J˜šΟk ˜ J˜J˜—J˜šΟnœœ˜Jšœ˜ Jšœœœ˜J˜J˜šžœœœœ ˜'Kšœœœ˜KšœΟc˜ —K˜K˜šžœœœœœœœ˜;Kšœœœ˜IKšœ˜#KšœŸ˜—K˜K˜š ž œœœ%œœœ˜Zšœœœœœœœœ˜OJšœ˜Jšœ˜—KšœŸ ˜ —K˜š ž œœœœœ˜6Kšœœ˜(KšœŸž ˜—K˜šžœœœœœœœ˜:Kšœ ˜)KšœŸž˜—K˜šž œœœœ ˜?KšœœB˜MKšœŸž ˜—K˜šžœœœœœœœ˜>Kšœœ˜'K˜,Kšœ˜ KšœŸž˜ —K˜šžœœœœœœœ˜:Kšœ˜#KšœŸž˜—K˜Kšœ˜——…—ΪΞ