66 lines
1.2 KiB
Plaintext
66 lines
1.2 KiB
Plaintext
class Set(*set) {
|
||
|
||
method init {
|
||
var elems = set;
|
||
set = Hash.new;
|
||
elems.each { |e| self += e }
|
||
}
|
||
|
||
method +(elem) {
|
||
set{elem} = elem;
|
||
self;
|
||
}
|
||
|
||
method del(elem) {
|
||
set.delete(elem);
|
||
}
|
||
|
||
method has(elem) {
|
||
set.has_key(elem);
|
||
}
|
||
|
||
method ∪(Set that) {
|
||
Set(set.values..., that.values...);
|
||
}
|
||
|
||
method ∩(Set that) {
|
||
Set(set.keys.grep{ |k| k ∈ that } \
|
||
.map { |k| set{k} }...);
|
||
}
|
||
|
||
method ∖(Set that) {
|
||
Set(set.keys.grep{|k| !(k ∈ that) } \
|
||
.map {|k| set{k} }...);
|
||
}
|
||
|
||
method ^(Set that) {
|
||
var d = ((self ∖ that) ∪ (that ∖ self));
|
||
Set(d.values...);
|
||
}
|
||
|
||
method count { set.len }
|
||
|
||
method ≡(Set that) {
|
||
(self ∖ that -> count.is_zero) && (that ∖ self -> count.is_zero);
|
||
}
|
||
|
||
method values { set.values }
|
||
|
||
method ⊆(Set that) {
|
||
that.set.keys.each { |k|
|
||
k ∈ self || return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
method to_s {
|
||
"Set{" + set.values.map{|e| "#{e}"}.sort.join(', ') + "}"
|
||
}
|
||
}
|
||
|
||
class Object {
|
||
method ∈(Set set) {
|
||
set.has(self);
|
||
}
|
||
}
|