RosettaCodeData/Task/Set/Icon/set-1.icon

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