The wiki entry says powersets have 2^n elements where n is the number of elements in the original set. 2^n grows exponentially fast: 2^5 = 35 2^10 = 1024 2^50 = 1125899906842624 2^100 = 1267650600228229401496703205376 So if it's added, bounding it to only support small collections is not a bad idea. 2^30 = 1,073,741,824, so 30 element collections are too big (with 1GB address space). But <= 25 elements would be OK: 2^25 = 33,554,432 I actually needed something like this a few months ago, so there are usecases.
Sent: Thursday, October 22, 2015 at 4:58 PM From: stepharo <stepharo@free.fr> To: "Pharo Development List" <pharo-dev@lists.pharo.org> Subject: [Pharo-dev] powerSet
Hi
I was programming an exercise with one of my son (well in Python.... arghhhhhh) and I end it up doing it in Pharo (I'm save now).
The idea was to write one function that computes the powerset
powerset(4) = a Set(a Set(1) a Set(1 2) a Set(3) a Set(2) a Set(1 3) a Set(2 3) a Set(1 2 3) a Set(4) a Set(1 4) a Set(2 4) a Set(1 2 4) a Set(3 4) a Set(1 3 4) a Set(2 3 4) a Set(1 2 3 4))
I did it without thinking too much in fact
| s n ps | ps := Set new.
1 to: ((2 raisedTo: 4) -1) do: [ :i | s := Set new. n := 0. 1 to: 4 do: [ :b | n := n + 1. ((i bitAt: b) = 1 ) ifTrue: [ s add: n]. ps add: s ]]. ps
but I wonder if we want to add it to our lib.
Stef