lista1([50,30,60,40,20,10]).
% beszuras binaris faba
beszur(ures,Elem,bfa(Elem,ures,ures)).
beszur(bfa(E,B,J),Elem,Fa):- Elem<E, beszur(B,Elem,B1), Fa=bfa(E,B1,J).
beszur(bfa(E,B,J),Elem,Fa) :- Elem>=E, beszur(J,Elem,J1), Fa=bfa(E,B,J1).
% torles
torol(bfa(E,B,J),X,Fa):- X<E, torol(B,X,B1), Fa=bfa(E,B1,J).
torol(bfa(E,B,J),X,Fa):- X>E, torol(J,X,J1), Fa=bfa(E,B,J1).
torol(bfa(X,ures,ures),X,ures).
torol(bfa(X,B,ures),X,B).
torol(bfa(X,ures,J),X,J).
torol(bfa(X,B,J),X,Fa):- minelem(J,E1), torol(J,E1,J1), Fa=bfa(E1,B,J1).
minelem(bfa(E,ures,_),E).
minelem(bfa(_,B,_),N):- minelem(B,N).
% Hogyan módosítanád a torol szabályait, hogy mindig csak egy megoldást adjon vissza?
% listabol binaris fa
lista_bfa(Lista,Fa):- lista_bfa(Lista,ures,Fa).
lista_bfa([],BF,BF).
lista_bfa([E|L],BF0,BF):- beszur(BF0,E,BF1), lista_bfa(L,BF1,BF).
% binaris fabol lista
bfa_lista(ures,L,L).
bfa_lista(bfa(E,B,J),L0,L):- bfa_lista(J,L0,L1), bfa_lista(B,[E|L1],L).
% lista rendezo
rendez(L,R):- lista_bfa(L,ures,BF), bfa_lista(BF,[],R).
% A sicstus prolog beépített fakezelő moduljáráról itt olvashatsz.
%--------------------------------------------------------------------------------------
select(E,[E|L],L).
select(E,[A|L],[A|L1]):- select(E,L,L1).
%---------------------------------------------------------------------------------
graf1([a-b,a-d,b-c,b-d,b-e,c-d,c-e,d-e]).
graf2([a-b,a-d,b-c,b-d]).
graf3([a-b,a-d,c-e]).
conn(_-P,[P-_|_]).
seta([_]).
seta([E|L]):- conn(E,L), seta(L).
azonos_el(P-Q,P-Q).
azonos_el(P-Q,Q-P).
graf_list([],[]).
graf_list(G1,[E1|L1]):- select(E2,G1,G2), azonos_el(E2,E1), graf_list(G2,L1).
bejar(G,L):- graf_list(G,L), seta(L).
bovit([],A,[A]).
bovit([B|L],A,[B|L]):- B=A.
bovit([B|L],A,[B|L1]):- B\=A, bovit(L,A,L1).
csucsok([],[]).
csucsok([A-B|G],L):- csucsok(G,L1), bovit(L1,A,L2), bovit(L2,B,L).