123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- %
- % SETS.RED - Functions acting on lists as sets
- %
- % Author: Eric Benson
- % Symbolic Computation Group
- % Computer Science Dept.
- % University of Utah
- % Date: 12 December 1981
- % Copyright (c) 1981 University of Utah
- %
- lisp procedure List2Set L; %. Remove redundant elements from L
- if not PairP L then NIL
- else if car L member cdr L then List2Set cdr L
- else car L . List2Set cdr L;
- lisp procedure List2SetQ L; %. EQ version of List2Set
- if not PairP L then NIL % Don't confuse it with SetQ!
- else if car L memq cdr L then List2Set cdr L
- else car L . List2Set cdr L;
- lisp procedure Adjoin(Element, ASet); %. Add Element to Set
- if Element member ASet then ASet else Element . ASet;
- lisp procedure AdjoinQ(Element, ASet); %. EQ version of Adjoin
- if Element memq ASet then ASet else Element . ASet;
- lisp procedure Union(X, Y); %. Set union
- if not PairP X then Y
- else Union(cdr X, if car X Member Y then Y else car X . Y);
- lisp procedure UnionQ(X, Y); %. EQ version of UNION
- if not PairP X then Y
- else UnionQ(cdr X, if car X memq Y then Y else car X . Y);
- lisp procedure XN(U, V); %. Set intersection
- if not PairP U then NIL
- else if car U Member V then car U . XN(cdr U, Delete(car U, V))
- else XN(cdr U, V);
- lisp procedure XNQ(U, V); %. EQ version of XN
- if null PairP U then NIL
- else if car U memq V then car U . XN(cdr U, DelQ(car U, V))
- else XN(cdr U, V);
- LoadTime
- << PutD('Intersection, 'EXPR, cdr GetD 'XN); % for those who like to type
- PutD('IntersectionQ, 'EXPR, cdr GetD 'XNQ) >>;
- END;
|