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