Power set: Difference between revisions

Content added Content deleted
(Added Logtalk version.)
(→‎{{header|Prolog}}: replaced by cleaner version. non findall version will be added later.)
Line 1,078: Line 1,078:
=={{header|Prolog}}==
=={{header|Prolog}}==
<lang prolog>
<lang prolog>
%powerset(Lst, PLst).
powerset(Set,PowerSet) :-
findall(SubSet,subset(Set,SubSet),PowerSet).
addhead(Hd,Lst,Res):-
Res = [Hd |Lst].


head([H|_],H).
subset([],[]).
subset([_|Tail],Set) :- subset(Tail,Set).
tail([_|T],T).
subset([Head|Tail],[Head|Set]) :- subset(Tail,Set).


powerset([], [[]]).
powerset(Lst, PLst):-
head(Lst,Hd),
tail(Lst,Tl),
powerset(Tl,Rest),
maplist(addhead(Hd), Rest, Ans),
append(Rest, Ans, PLst).

e.g
powerset([1,2,3,4], R), write_term(R, [max_depth(100)]).
[[],
[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]]


?- powerset([1,2,3,4],X).
X = [[], [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]].
</lang>
</lang>

=={{header|PureBasic}}==
=={{header|PureBasic}}==
This code is for console mode.
This code is for console mode.