Power set: Difference between revisions
Content added Content deleted
(→Logical (cut-free) Definition: symbolic operation etc) |
(→Single-Functor Definition: simplified version is much faster) |
||
Line 1,734: | Line 1,734: | ||
===Single-Functor Definition=== |
===Single-Functor Definition=== |
||
<lang Prolog>power_set( |
<lang Prolog>power_set( [], [[]]). |
||
power_set( [X|Xs], PS) :- |
|||
⚫ | |||
maplist( append([X]), PS1, PS2 ), % i.e. prepend X to each 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 : |
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> |
</pre> |
||