123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- %% sets.tst
- %% Author: F.J.Wright@Maths.QMW.ac.uk
- %% Date: 20 Feb 1994
- %% Test of REDUCE sets package, based on the examples on page 51 of
- %% the "Maple V Language Reference Manual"
- %% by Char, Geddes, Gonnet, Leong, Monagan and Watt (Springer, 1991).
- %% The output (especially of symbolic set expressions) looks better
- %% using PSL-REDUCE under MS-Windows or X in graphics mode.
- %% Note that REDUCE supports n-ary symbolic infix operators,
- %% does not require any special quoting to use an infix operator
- %% as a prefix operator, and supports member as an infix operator.
- %% However, REDUCE ALWAYS requires evalb to explicitly evaluate a
- %% Boolean expression outside of a conditional statement.
- %% Maple 5.2 does not provide any subset predicates.
- clear a, b, c, x, y, z;
- s := {x,y} union {y,z};
- % s := {x,y,z}
- t := union({x,y},{y,z});
- % t := {x,y,z}
- evalb(s = t);
- % true
- evalb(s set_eq t);
- % true
- evalb(member(y, s));
- % true
- evalb(y member s);
- % true
- evalb(y member {x*y, y*z});
- % false
- evalb(x*y member {x*y, y*z});
- % true
- {3,4} union a union {3,7} union b;
- % {3,4,7} union a union b
- {x,y,z} minus {y,z,w};
- % {x}
- a minus b;
- % a\b
- a\b;
- % a\b
- minus(a,a);
- % {}
- {x,y,z} intersect {y,z,w};
- % {y,z}
- intersect(a,c,b,a);
- % a intersection b intersection c
- %% End of Maple examples.
- (a union b) intersect c where set_distribution_rule;
- % a intersection c union b intersection c
- algebraic procedure power_set s;
- %% Power set of a set as an algebraic list (inefficiently):
- if s = {} then {{}} else
- {s} union for each el in s join power_set(s\{el});
- power_set{};
- power_set{1};
- power_set{1,2};
- power_set{1,2,3};
- evalb 1;
- % true
- evalb 0;
- % false
- evalb(a = a);
- % true
- evalb(a = b);
- % false
- evalb(2 member {1,2} union {2,3});
- % true
- evalb({2} member {1,2} union {2,3});
- % false
- evalb({1,3} subset {1,2} union {2,3});
- % true
- evalb(a subset a union b);
- % true
- evalb(a subset_eq a union b);
- % true
- evalb(a set_eq a union b);
- % false
- evalb(a\b subset a union c);
- % true
- mkset{1,2,1};
- % {1,2}
- end;
|