Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gnu Prolog powerset modification

So i got this for powerset:

powerset([], []).
powerset([H|T], P) :- powerset(T,P).
powerset([H|T], [H|P]) :- powerset(T,P).

This generates all sets of a list. Is it possible to generate all sets in list order.

Example:

List = [a,b,c]

I want to get

[a],[a,b],[a,b,c],[b],[b,c],[c]

Note there is no [a,c] in this list of subsets since these are subsets starting from the left and going to the right.

I've tried using a combination of append and recursion, but that didn't work out as i wanted it to. Little stumped at this point.

Thanks.

like image 459
Matt Avatar asked Dec 22 '22 21:12

Matt


1 Answers

How about

powerset(L, [H|T]):-
  append([H|T], _, L).
powerset([_|L], P):-
  powerset(L, P).
like image 150
gusbro Avatar answered Jan 10 '23 05:01

gusbro