22 lines
683 B
Plaintext
22 lines
683 B
Plaintext
var [const] unique = Utils.Helpers.listUnique;
|
|
class Set {
|
|
fcn init { var [const] set = (vm.arglist.copy() : unique(_)) }
|
|
fcn holds(x) { set.holds(x) }
|
|
fcn union(setB) { self(set.xplode(),setB.set.xplode()) }
|
|
fcn intersection(setB){ sb:=setB.set;
|
|
C:=self(); sc:=C.set;
|
|
foreach x in (set){ if (sb.holds(x)) sc.append(x) }
|
|
C
|
|
}
|
|
fcn diff(setB){ C:=self(); C.set.extend(set);
|
|
setB.set.pump(Void,C.set.remove);
|
|
C
|
|
}
|
|
fcn isSubset(setB){ sb:=setB.set;
|
|
set.pump(Void,'wrap(x){
|
|
if (not sb.holds(x)) return(Void.Stop,False); True
|
|
})
|
|
}
|
|
fcn __opEQ(setB) { ((set.len() == setB.set.len()) and self.isSubset(setB)) }
|
|
}
|