Set: Difference between revisions

3,298 bytes added ,  4 years ago
no edit summary
m (→‎{{header|Sidef}}: updated the class name, as the Set class is now built-in)
No edit summary
Line 3,013:
setequalp(a, b);
false</lang>
 
=={{header|Nanoquery}}==
This is a full implementation of a set class.
<lang nanoquery>class set
declare internal_list
 
def set()
internal_list = list()
end
def set(list)
internal_list = list
end
 
def append(value)
if not value in internal_list
internal_list.append(value)
end
return this
end
def contains(value)
return value in internal_list
end
def difference(other)
diff = list()
for value in this.internal_list
diff.append(value)
end
 
for i in range(len(diff) - 1, 0)
if diff[i] in other.internal_list
diff.remove(i)
end
end
 
return new(set, diff)
end
def operator=(other)
for value in other.internal_list
if not value in this.internal_list
return false
end
end
return true
end
def intersection(other)
intersect = list()
for value in this.internal_list
if other.contains(value)
intersect.append(value)
end
end
return new(set, intersect)
end
def subset(other)
for value in this.internal_list
if not value in other.internal_list
return false
end
end
return true
end
def union(other)
u = list()
 
for value in this.internal_list
u.append(value)
end
 
for value in other.internal_list
if not value in u
u.append(value)
end
end
 
return new(set, u)
end
 
def toString()
return str(this.internal_list)
end
end</lang>
Testing this implementation:
<lang nanoquery>import "rosetta-code/set.nq"
 
a = new(set, {1, 2, 3, 4, 5})
b = new(set, {2, 3, 4, 5, 6, 8})
c = new(set, {2, 3, 4})
d = new(set, {2, 3, 4})
 
println "a: " + a
println "b: " + b
println "c: " + c
println "d: " + d
 
println "2 in a: " + a.contains(2)
println "6 in a: " + a.contains(6)
 
println "a union b: " + a.union(b)
println "a - b: " + a.difference(b)
println "c subset of a: " + c.subset(a)
 
println "c = d: " + (c = d)
println "d = c: " + (d = c)
 
println "a intersect b: " + a.intersection(b)
println "add 7 to a: " + a.append(7)
println "add 2 to a again: " + a.append(2)</lang>
{{out}}
<pre>a: [1, 2, 3, 4, 5]
b: [2, 3, 4, 5, 6, 8]
c: [2, 3, 4]
d: [2, 3, 4]
2 in a: true
6 in a: false
a union b: [1, 2, 3, 4, 5, 6, 8]
a - b: [1]
c subset of a: true
c = d: true
d = c: true
a intersect b: [2, 3, 4, 5]
add 7 to a: [1, 2, 3, 4, 5, 7]
add 2 to a again: [1, 2, 3, 4, 5, 7]</pre>
 
=={{header|Nemerle}}==
Anonymous user