Given an array of items, create a set of all subsets of the items. The result is also called a powerset.
Set allSubsets(Array items) {
if (items == null || items.length == 0) {
Set s = new Set()
s.put(new Set())
return s
}
Item item = items.removeFirst
Set sets = allSubsets(items)
Set newSets = sets.copy()
for (set in sets) {
set.put(item)
newSets.put(set)
}
return newSets
}