(phixonline)-->
with javascript_semantics
function is_element(object x, sequence set)
return find(x,set)!=0
end function
function set_union(sequence set1, set2)
for i=1 to length(set2) do
if not is_element(set2[i],set1) then
set1 = append(set1,set2[i])
end if
end for
return set1
end function
function set_intersection(sequence set1, set2)
sequence res = {}
for i=1 to length(set1) do
if is_element(set1[i],set2) then
res = append(res,set1[i])
end if
end for
return res
end function
function set_difference(sequence set1, set2)
sequence res = {}
for i=1 to length(set1) do
if not is_element(set1[i],set2) then
res = append(res,set1[i])
end if
end for
return res
end function
function set_subset(sequence set1, set2)
for i=1 to length(set1) do
if not is_element(set1[i],set2) then
return false
end if
end for
return true
end function
function set_equality(sequence set1, set2)
if length(set1)!=length(set2) then
return false
end if
return set_subset(set1,set2)
end function
--test code:
?is_element(3,{1,2,3}) -- 1
?is_element(4,{1,2,3}) -- 0
?set_union({1,2,3},{3,4,5}) -- {1,2,3,4,5}
?set_intersection({1,2,3},{3,4,5}) -- {3}
?set_difference({1,2,3},{3,4,5}) -- {1,2}
?set_subset({1,2,3},{3,4,5}) -- 0
?set_subset({1,2},{1,2,3}) -- 1
?set_equality({1,2,3},{3,4,5}) -- 0
?set_equality({1,2,3},{3,1,2}) -- 1