Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local set = {}
- --create a nil set;
- function set.create()
- return setmetatable({}, set)
- end
- --insert a x value in set s;
- function set:insert(x)
- self[x] = true
- end
- --remove a x value of set s;
- function set:remove(x)
- self[x] = nil
- end
- --create and return a complement set
- function set:complement(s2)
- local s3 = set.create()
- for k in pairs(s2) do
- if not self:isIn(k) then
- s3:insert(k)
- end
- end
- return s3
- end
- --create and return the unite two sets
- function set:union(s2)
- local s3 = set.create()
- for k in pairs(self) do
- s3:insert(k)
- end
- for k in pairs(s2) do
- s3:insert(k)
- end
- return s3
- end
- --create and return the intersection of two sets
- function set:intersection(s2)
- local s3 = set.create()
- for k in pairs(self) do
- if s2:isIn(k) then
- s3:insert(k)
- end
- end
- return s3
- end
- --return true if the set s is nil
- function set:isEmpty()
- local count = 0
- for k in pairs(self) do
- count = count + 1
- end
- return count == 0
- end
- --return true if x is in set s
- function set:isIn(self, x)
- return self[x]
- end
- --return true if s2 is contained in s1
- function set:isSubset(s2)
- for k in pairs(s2) do
- if not self:isIn(k) then
- return false
- end
- end
- return true
- end
- --return true if s1 is contained in s2
- function set:isSuperset(s2)
- return s2:isSubset(self)
- end
- return set
Add Comment
Please, Sign In to add comment