Power set: Difference between revisions
Content added Content deleted
m (→{{header|J}}: whitespace) |
(Added Logtalk version.) |
||
Line 855: | Line 855: | ||
show powerset [1 2 3] |
show powerset [1 2 3] |
||
[[1 2 3] [1 2] [1 3] [1] [2 3] [2] [3] []]</lang> |
[[1 2 3] [1 2] [1 3] [1] [2 3] [2] [3] []]</lang> |
||
=={{header|Logtalk}}== |
|||
<lang logtalk>:- object(set). |
|||
:- public(powerset/2). |
|||
powerset(Set, PowerSet) :- |
|||
reverse(Set, RSet), |
|||
powerset_1(RSet, [[]], PowerSet). |
|||
powerset_1([], PowerSet, PowerSet). |
|||
powerset_1([X| Xs], Yss0, Yss) :- |
|||
powerset_2(Yss0, X, Yss1), |
|||
powerset_1(Xs, Yss1, Yss). |
|||
powerset_2([], _, []). |
|||
powerset_2([Zs| Zss], X, [Zs, [X| Zs]| Yss]) :- |
|||
powerset_2(Zss, X, Yss). |
|||
reverse(List, Reversed) :- |
|||
reverse(List, [], Reversed). |
|||
reverse([], Reversed, Reversed). |
|||
reverse([Head| Tail], List, Reversed) :- |
|||
reverse(Tail, [Head| List], Reversed). |
|||
:- end_object.</lang> |
|||
Usage example: |
|||
<lang logtalk>| ?- set::powerset([1, 2, 3, 4], PowerSet). |
|||
PowerSet = [[],[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]] |
|||
yes</lang> |
|||
=={{header|Lua}}== |
=={{header|Lua}}== |