<> <> <> <> <> <> <> <> <<>> DIRECTORY Atom USING [PropList, DottedPair, DottedPairNode], Basics USING [Comparison]; List: CEDAR DEFINITIONS = BEGIN <<>> <> <> AList: TYPE = Atom.PropList; DottedPair: TYPE = Atom.DottedPair; DottedPairNode: TYPE = Atom.DottedPairNode; LORA: TYPE = LIST OF REF ANY; Comparison: TYPE = Basics.Comparison; CompareProc: TYPE = PROC[ref1: REF ANY, ref2: REF ANY] RETURNS [Comparison]; <> EqLists: PROC [l1, l2: LORA] RETURNS [BOOL]; <> <<>> Memb: PROC [ref: REF ANY, list: LORA] RETURNS[BOOL]; <> <> Append: PROC[l1: LORA, l2: LORA _ NIL] RETURNS[LORA]; <> <<>> Remove: PROC[ref: REF ANY, list: LORA] RETURNS[LORA]; <> <<>> Reverse: PROC [list: LORA] RETURNS[LORA]; <> << >> Union: PROC [l1, l2: LORA] RETURNS[LORA]; <> <<>> Intersection: PROC [l1, l2: LORA] RETURNS[LORA]; <> <<>> ListDifference: PROC [l1, l2: LORA] RETURNS[LORA]; <> <<>> LDiff: PROC [list, tailOfList: LORA] RETURNS[LORA]; <> <> Nconc: PROC [l1, l2: LORA] RETURNS[LORA]; <> <<>> Nconc1: PROC [list: LORA, ref: REF ANY] RETURNS[LORA]; <> <> <<>> DRemove: PROC [ref: REF ANY, list: LORA] RETURNS[LORA]; <> <<>> DReverse: PROC [list: LORA] RETURNS[LORA]; <> DSubst: PROC [new, old: REF ANY, expr: LORA] RETURNS[LORA]; <> <> NthTail: PROC[list: LORA, n: INT] RETURNS[LORA]; <> < Length[list].>> <<>> NthElement: PROC[list: LORA, n: INT] RETURNS[REF ANY]; <> <> <<>> <> Assoc: PROC [key: REF ANY, aList: AList] RETURNS[REF ANY]; <> DotCons: PROC [key, val: REF ANY] RETURNS [DottedPair]; <> <<(slightly slower, but generates less code)>> PutAssoc: PROC [key: REF ANY, val: REF ANY, aList: AList] RETURNS[AList]; <> <> Length: PROC [list: LORA] RETURNS[INT]; <> Map: PROC [list: LORA, proc: PROC[REF ANY, LORA]]; <> <> <> <> Subst: PROC [new, old: REF ANY, expr: LORA] RETURNS [LORA]; <> <