Power set: Difference between revisions

→‎Single-Functor Definition: simplified version is much faster
(→‎Logical (cut-free) Definition: symbolic operation etc)
(→‎Single-Functor Definition: simplified version is much faster)
Line 1,734:
 
===Single-Functor Definition===
<lang Prolog>power_set(T [], PS[[]]) :-.
bagof(PS1, power_set(T, [X|Xs], PS1PS), PS).:-
power_set(T, PSXs, PS1) :-,
 
maplist( append([X]), PS1, PS2 ), % i.e. prepend X to each PS1
power_set(T, PS, PS1) :-
append(PS1, PS2, PS).</lang>
select(E, T, T1), !,
append(PS, [E], PST),
( PST = PS1; power_set(T1, PS, PS1); power_set(T1, PST, PS1)).
 
power_set([], [], []).
</lang>
Output :
<pre>
<pre> ?- power_set([1,2,3,4], L).
:- power_set([1,2,3,4,5,6,7,8], X), length(X,N), writeln(N).
L = [[1],[2],[3],[4],[],[3,4],[2,3],[2,4],[2,3,4],[1,2],[1,3],[1,4],[1,3,4],[1,2,3],[1,2,4],[1,2,3,4]].
256
</pre>
 
2,496

edits