parent $libraries
object $set
var $root child_index 0
var $root owners [$set]
var $root owned [$set]
var $root fertile 0
var $root inited 1
var $root manager $set
var $root writable [$set]
var $root readable ['parameters, 'methods, 'code]
var $root dbref 'set
method difference
arg [args];
var set, list, element;
// Usage: diff(set 1, set 2, ..., set n)
// Returns all elements of set 1 that are not in sets 2..n
if (!args)
return [];
set = args[1];
for list in (delete(args, 1)) {
for element in (list)
set = setremove(set, element);
}
return set;
.
method contains
arg [args];
var super, list, element;
// True if the first list given is a superset of all subsequent lists.
// False otherwise. [] is a superset of [] and nothing else; anything is
// a superset of []. If only one list is given, return true.
super = args ? args[1] | [];
for list in (delete(args, 1)) {
for element in (list) {
if (!(element in super))
return 0;
}
}
return 1;
.
method equal
arg set1, set2;
var element;
// True if the two lists given contain the same elements.
// False otherwise.
while (set1) {
element = set1[1];
if ((!element) in set2)
return 0;
while (element in set2)
set2 = setremove(set2, element);
while (element in set1)
set1 = setremove(set1, element);
}
return set2 == [];
.