Power set: Difference between revisions

Content added Content deleted
(Added 11l)
(Added Wren)
Line 4,274: Line 4,274:
{{out}}
{{out}}
<pre>{{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3},{4},{1,4},{2,4},{1,2,4},{3,4},{1,3,4},{2,3,4},{1,2,3,4}}</pre>
<pre>{{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3},{4},{1,4},{2,4},{1,2,4},{3,4},{1,3,4},{2,3,4},{1,2,3,4}}</pre>

=={{header|Wren}}==
Although we have a module for sets, they are based on maps whose keys must be value types. This means that sets of sets are technically impossible because set elements are not value types.

We therefore use lists to represent sets which works fine here.
<lang ecmascript>var powerset // recursive
powerset = Fn.new { |set|
if (set.count == 0) return [[]]
var head = set[0]
var tail = set[1..-1]
return powerset.call(tail) + powerset.call(tail).map { |s| [head] + s }
}

var sets = [ [1, 2, 3, 4], [], [[]] ]
for (set in sets) {
System.print("The power set of %(set) is:")
System.print(powerset.call(set))
System.print()
}</lang>

{{out}}
<pre>
The power set of [1, 2, 3, 4] is:
[[], [4], [3], [3, 4], [2], [2, 4], [2, 3], [2, 3, 4], [1], [1, 4], [1, 3], [1, 3, 4], [1, 2], [1, 2, 4], [1, 2, 3], [1, 2, 3, 4]]

The power set of [] is:
[[]]

The power set of [[]] is:
[[], [[]]]
</pre>


=={{header|zkl}}==
=={{header|zkl}}==