62 lines
1.3 KiB
Plaintext
62 lines
1.3 KiB
Plaintext
procedure display_set (s)
|
|
writes ("[")
|
|
every writes (!s || " ")
|
|
write ("]")
|
|
end
|
|
|
|
# fail unless s1 and s2 contain the same elements
|
|
procedure set_equals (s1, s2)
|
|
return subset(s1, s2) & subset(s2, s1)
|
|
end
|
|
|
|
# fail if every element in s2 is not contained in s1
|
|
procedure subset (s1, s2)
|
|
every (a := !s2) do {
|
|
if not(member(s1,a)) then fail
|
|
}
|
|
return s2
|
|
end
|
|
|
|
procedure main ()
|
|
a := set(1, 1, 2, 3, 4)
|
|
b := set(2, 3, 5)
|
|
writes ("a: ")
|
|
display_set (a)
|
|
writes ("b: ")
|
|
display_set (b)
|
|
# basic set operations
|
|
writes ("Intersection: ")
|
|
display_set (a ** b)
|
|
writes ("Union: ")
|
|
display_set (a ++ b)
|
|
writes ("Difference: ")
|
|
display_set (a -- b)
|
|
# membership
|
|
if member(a, 2) then
|
|
write ("2 is a member of a")
|
|
else
|
|
write ("2 is not a member of a")
|
|
if member(a, 5) then
|
|
write ("5 is a member of a")
|
|
else
|
|
write ("5 is not a member of a")
|
|
# equality
|
|
if set_equals(a, set(1,2,3,4,4)) then
|
|
write ("a equals set(1,2,3,4,4)")
|
|
else
|
|
write ("a does not equal set(1,2,3,4,4)")
|
|
if set_equals(a, b) then
|
|
write ("a equals b")
|
|
else
|
|
write ("a does not equal b")
|
|
# subset
|
|
if subset(a, set(1,2)) then
|
|
write ("(1,2) is included in a")
|
|
else
|
|
write ("(1,2) is not included in a")
|
|
if subset(a, set(1,2,5)) then
|
|
write ("(1,2,5) is included in a")
|
|
else
|
|
write ("(1,2,5) is not included in a")
|
|
end
|