(phixonline)-->
with javascript_semantics
function power_set(sequence s)
sequence powerset = {{}}, subset = {{{},0}}
while length(subset) do
sequence next = {}
for i=1 to length(subset) do
{sequence sub, integer k} = subset[i]
for j=k+1 to length(s) do
sequence ni = append(deep_copy(sub),s[j])
next = append(next,{ni,j})
powerset = append(powerset,ni)
end for
end for
subset = next
end while
assert(length(powerset)=power(2,length(s)))
return powerset
end function
?power_set({1,2,3,4})
?power_set({4,3,2,1})
?power_set({})
?power_set({{}})