:- use_module(library(lists)).
:- write('Hasznalat:   gen(L,K)').


% Eloszor M=1 listabol allo jo felosztast keresunk, majd M=2 listabol allot, ...
% Amint megtalaltuk a legkisebb olyan M-et, melyre mar van jo felosztas, kiirjuk
% az osszes ilyet, majd megallunk.
gen(L,K):- egytol(M),
           findall(Felosztas,feloszt(L,K,M,Felosztas),MFeloszt),
	   MFeloszt\=[],
	   !,
	   tell('out.pl'),
	   kiir(MFeloszt),
	   told.

egytol(1).
egytol(M):- egytol(M1), M is M1+1.

kiir([]).
kiir([L|Marad]):- write(L), nl, kiir(Marad).


reszlista([],[],[]).
reszlista([E|L],[E|Resz],Marad):- reszlista(L,Resz,Marad).
reszlista([E|L],Resz,[E|Marad]):- reszlista(L,Resz,Marad).


jolista([E],Ossz):- Ossz>=E.
jolista([E|L],Ossz1):- Ossz2 is Ossz1-E, jolista(L,Ossz2).


feloszt([],_,0,[]).
feloszt(L,K,M,[Uj|Felosztas]):- 
                        M>0,
			reszlista(L,Uj,Marad),
                        jolista(Uj,K),
			M1 is M-1,
			feloszt(Marad,K,M1,Felosztas).
