[Prolog] Generowanie podzbiorów


(GL1zdA) #1

Chce wygenerowac z listy jej podzbiory. Na razie udalo mi sie zrobic:

/* Czlonek listy */

member(X, [X|_]).

member(X, [_|Rest]) :- member(X, Rest).


/* Usuwanie czlonka listy */

delete(X, [X|Rest], Rest).

delete(X, [Y|Rest], [Y|Output]) :- delete(X, Rest, Output).


/* Czlonkowie listy */

members([],_).

members([H|Mlist], List) :- member(H, List), delete(H, List, NewList), members(Mlist, NewList).

members sprawdza czy lista jest podzbiorem listy. Porzadanym dzialaniem byloby, gdyby members(Podzbiory, [jakas lista]) zwracalo mi podzbiory tej listy - teraz prawie dziala - zwraca wszystkie podzbiory ale dodatkowo wszystkie permutacje tych podzbiorow. Jesli ktos wie co zmienic, to bede wdzieczny.