RosettaCodeData/Task/Power-set/Phix/power-set.phix

34 lines
678 B
Plaintext

sequence powerset
integer step = 1
function pst(object key, object /*data*/, object /*user_data*/)
integer k = 1
while k<length(powerset) do
k += step
for j=1 to step do
powerset[k] = append(powerset[k],key)
k += 1
end for
end while
step *= 2
return 1
end function
function power_set(integer d)
powerset = repeat({},power(2,dict_size(d)))
step = 1
traverse_dict(routine_id("pst"),0,d)
return powerset
end function
integer d1234 = new_dict()
setd(1,0,d1234)
setd(2,0,d1234)
setd(3,0,d1234)
setd(4,0,d1234)
?power_set(d1234)
integer d0 = new_dict()
?power_set(d0)
setd({},0,d0)
?power_set(d0)