1%% sets.tst 2 3%% Author: F.J.Wright@Maths.QMW.ac.uk 4%% Date: 20 Feb 1994 5 6%% Test of REDUCE sets package, based on the examples on page 51 of 7%% the "Maple V Language Reference Manual" 8%% by Char, Geddes, Gonnet, Leong, Monagan and Watt (Springer, 1991). 9 10%% The output (especially of symbolic set expressions) looks better 11%% using PSL-REDUCE under MS-Windows or X in graphics mode. 12 13%% Note that REDUCE supports n-ary symbolic infix operators, 14%% does not require any special quoting to use an infix operator 15%% as a prefix operator, and supports member as an infix operator. 16%% However, REDUCE ALWAYS requires evalb to explicitly evaluate a 17%% Boolean expression outside of a conditional statement. 18%% Maple 5.2 does not provide any subset predicates. 19 20clear a, b, c, x, y, z; 21 22 23 24s := {x,y} union {y,z}; 25 26 27s := {x,y,z} 28 29% s := {x,y,z} 30 31t := union({x,y},{y,z}); 32 33 34t := {x,y,z} 35 36% t := {x,y,z} 37 38evalb(s = t); 39 40 41true 42 43% true 44 45evalb(s set_eq t); 46 47 48true 49 50% true 51 52evalb(member(y, s)); 53 54 55true 56 57% true 58 59evalb(y member s); 60 61 62true 63 64% true 65 66evalb(y member {x*y, y*z}); 67 68 69false 70 71% false 72 73evalb(x*y member {x*y, y*z}); 74 75 76true 77 78% true 79 80{3,4} union a union {3,7} union b; 81 82 83{3,4,7} union a union b 84 85% {3,4,7} union a union b 86 87{x,y,z} minus {y,z,w}; 88 89 90{x} 91 92% {x} 93 94a minus b; 95 96 97a\b 98 99% a\b 100 101a\b; 102 103 104a\b 105 106% a\b 107 108minus(a,a); 109 110 111{} 112 113% {} 114 115{x,y,z} intersect {y,z,w}; 116 117 118{y,z} 119 120% {y,z} 121 122intersect(a,c,b,a); 123 124 125a intersection b intersection c 126 127% a intersection b intersection c 128 129%% End of Maple examples. 130 131(a union b) intersect c where set_distribution_rule; 132 133 134a intersection c union b intersection c 135 136% a intersection c union b intersection c 137 138algebraic procedure power_set s; 139 %% Power set of a set as an algebraic list (inefficiently): 140 if s = {} then {{}} else 141 {s} union for each el in s join power_set(s\{el}); 142 143 144power_set 145 146 147power_set{}; 148 149 150{{}} 151 152power_set{1}; 153 154 155{{1},{}} 156 157power_set{1,2}; 158 159 160{{2},{1,2},{1},{}} 161 162power_set{1,2,3}; 163 164 165{{3},{2,3},{2},{1,3},{1,2,3},{1,2},{1},{}} 166 167 168 169evalb 1; 170 171 172true 173 174% true 175 176evalb 0; 177 178 179false 180 181% false 182 183evalb(a = a); 184 185 186true 187 188% true 189 190evalb(a = b); 191 192 193false 194 195% false 196 197evalb(2 member {1,2} union {2,3}); 198 199 200true 201 202% true 203 204evalb({2} member {1,2} union {2,3}); 205 206 207false 208 209% false 210 211evalb({1,3} subset {1,2} union {2,3}); 212 213 214true 215 216% true 217 218evalb(a subset a union b); 219 220 221true 222 223% true 224 225evalb(a subset_eq a union b); 226 227 228true 229 230% true 231 232evalb(a set_eq a union b); 233 234 235false 236 237% false 238 239evalb(a\b subset a union c); 240 241 242true 243 244% true 245 246mkset{1,2,1}; 247 248 249{1,2} 250 251% {1,2} 252 253end; 254 255Tested on x86_64-pc-windows CSL 256Time (counter 1): 0 ms 257 258End of Lisp run after 0.00+0.06 seconds 259real 0.20 260user 0.00 261sys 0.07 262