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
>
>