Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- tree(t(6, t(4, t(2, nil, nil), t(5, nil, nil)), t(9, t(7, nil, nil), nil))).
- tree_i(t(6, t(4, t(2, _, _), t(5, _, _)), t(9, t(7, _, _), _))).
- tree2(t(a,t(b,t(d,t(g,_,_,_),t(h,_,_,_),_),t(e,_,_,_),_),t(c,_,t(f,t(i,_,_,_),t(j,_,_,_),_),_),_)).
- cmmdc(A,B,A):-A=B.
- cmmdc(A,B,R):-B>A,R1 is B-A ,cmmdc(A,R1,R).
- cmmdc(A,B,R):-A>B,R1 is A-B,cmmdc(R1,B,R).
- cmmmc(A,B,R):-R1 is A*B,cmmdc(A,B,R2),R is R1 / R2.
- sum([],0).
- sum([H|K],R):-sum(K,R1),R is R1+H.
- add_first(X,L,R):- R=[X|L].
- %numere pare
- separate_parity([],[],[]).
- separate_parity([H|K],E,O):-1 is H mod 2, separate_parity(K,E,R),O=[H|R].
- separate_parity([H|K],E,O):-separate_parity(K,R,O),E=[H|R].
- %inclocuim aparitiilelui x cu y
- replace_all(_,_,[],[]):-!.
- replace_all(X,Y,[X|K],[Y|R]):-replace_all(X,Y,K,R),!.
- replace_all(X,Y,[H|K],[H|R]):-replace_all(X,Y,K,R),!.
- %sterge elem de pe pozitiile divizibile k
- sterge_k_1([],_,_,[]):-!.
- sterge_k_1([_|K],X,C,R):-0 is C mod X,C1 is C+1,!,sterge_k_1(K,X,C1,R).
- sterge_k_1([H|K],X,C,[H|R]):-C1 is C+1,sterge_k_1(K,X,C1,R).
- sterge_k(L,X,R):-sterge_k_1(L,X,1,R).
- %inverseaza incompleta
- append_li(L,L2,L2):-var(L),!.
- append_li([H|T],L2,[H|R]):-append_li(T,L2,R).
- reverse_li(L,_):-var(L),!.
- reverse_li([H|T],R):-reverse_li(T,R1),!,append_li(R1,[H|_],R).
- %inverseaza completa
- reverse1([],[]):-!.
- reverse1([H|T],R):-reverse1(T,R1),!,append(R1,[H],R).
- %max dintre a si b
- max(A,B,A):-A>B.
- max(_,B,B).
- %adancimea maxima a unei liste imbricate
- adancime([],1).
- adancime([H|T],R):-atomic(H),adancime(T,R).
- adancime([H|T],R):-adancime(H,R1),adancime(T,R2),R3 is R1+1,max(R2,R3,R).
- %aplatizarea unei liste imbricate cu lista completa
- flat([],[]).
- flat([H|T],[H|R]):-atomic(H),flat(T,R).
- flat([H|T],R):-flat(H,R1),flat(T,R2),append(R1,R2,R).
- %aplatizarea unei liste imbricate cu lista incompleta
- flat_li(L,_):-var(L),!.
- flat_li([H|T],[H|R]):-atomic(H),!,flat_li(T,R).
- flat_li([H|T],R):-flat_li(H,R1),flat_li(T,R2),append_li(R1,R2,R).
- %adancimea unui arbore cu completa
- adancimeT(nil,0):-!.
- adancimeT(t(_,L,R),Rez):-adancimeT(L,R1),adancimeT(R,R2),max(R1,R2,R3),Rez is R3+1,!.
- %adancimea unui arbore cu incompleta
- adancimeTI(L,0):-var(L),!.
- adancimeTI(t(_,L,R),Rez):-adancimeTI(L,R1),adancimeTI(R,R2),max(R1,R2,R3),Rez is R3+1,!.
- %colectam noduri cu lista completa
- inordine(nil,[]).
- inordine(t(K,L,R),Rez):-inordine(L,LL),inordine(R,LR),append(LL,[K|LR],Rez).
- %colectam noduri cu lista diferenta
- inordine_dif(nil,L,L).
- inordine_dif(t(K,L,R),RS,RE):-inordine_dif(L,LLS,LLE),inordine_dif(R,LRS,LRE),RS=LLS,LLE=[K|LRS],RE=LRE.
- %colectam toate frunzele dintr-un arbore
- colect(nil,[]).
- colect(t(K,nil,nil),[K]).
- colect(t(_,L,R),L):-colect(L,LL),colect(R,LR),append(LL,LR,L).
- %sterge toate elementele x din lista
- delete_all(_,[],[]):-!.
- delete_all(X,[X|T],R):-delete_all(X,T,R),!.
- delete_all(X,[H|T],R):-delete_all(X,T,R1),!,R=[H|R1].
- %stergem elementele duplicate dintr-o lista
- sterge_duplicate([],[]):-!.
- sterge_duplicate([H|T],[H|R]):-member(H,T),delete_all(H,T,R1),sterge_duplicate(R1,R),!.
- sterge_duplicate([H|T],[H|R]):-sterge_duplicate(T,R),!.
- %sterge toate aparitiile minimului si max daca punem >
- min([],Min,Min):-!.
- min([H|T],Min,R):-H<Min,min(T,H,R),!.
- min([_|T],Min,R):-min(T,Min,R).
- min_pretty([H|T],R):-min(T,H,R).
- sterge_min(L,R):-min_pretty(L,R1),delete_all(R1,L,R).
- %inverseaza toate elementele dintr-o lista dupa pozitia k
- reverse_k([],_,[]):-!.
- reverse_k(L,0,R1):-reverse1(L,R1),!.
- reverse_k([H|T],K,[H|R]):- K1 is K-1, reverse_k(T,K1,R),!.
- %codifica o lista rle
- rle_encode([],K,Acc,Acc1):-reverse1(Acc,Acc1),!.
- rle_encode([H|T],K,Acc,R):-atomic(T),add_first([H,K],Acc,Acc1),rle_encode([],K,Acc1,R),!.
- rle_encode([H|H],K,Acc,R):-atomic(H),K1 is K+1,rle_encode(H,K1,Acc,R),!.
- rle_encode([H,H|T],K,Acc,R):-K1 is K+1,rle_encode([H|T],K1,Acc,R),!.
- rle_encode([H1,H2|T],1,Acc,R):-add_first(H1,Acc,Acc1),rle_encode([H2|T],1,Acc1,R),!.
- rle_encode([H1,H2|T],K,Acc,R):-add_first([H1,K],Acc,Acc1),rle_encode([H2|T],1,Acc1,R),!.
- rle_encode_pretty(L,R):-rle_encode(L,1,[],R).
- %rle_encode
- length([],Acc,Acc).
- length([H|T],Acc,R):-Acc1 is Acc+1,length(T,Acc1,R).
- extract_K(_,0,[]).
- extract_K([H|T],K,[H|R]):-K1 is K-1, extract_K(T,K1,R).
- %roteste o lista k pozitii la dreapta
- rotate_k(L,K,R):-length(L,0,Len),reverse1(L,R1),
- extract_K(R1,K,R2),reverse1(R2,R3),K1 is Len-K, extract_K(L,K1,R4),
- append(R3,R4,R).
- ins_sort([H|T],R):-ins_sort(T,R1),insert_ord(H,R1,R).
- ins_sort([],[]).
- insert_ord(X,[H|T],[H|R]):-X>H,insert_ord(X,T,R).
- insert_ord(X,T,[X|T]).
- char_cmp(A,B,1):-char_code(A,H1),char_code(B,H2),H1>H2.
- char_cmp(A,B,0).
- max_dep([],M,M).
- max_dep([H|T],M,R):-atomic(H),H>M,max_dep(T,H,R).
- max_dep([H|T],M,R):-atomic(H),max_dep(T,M,R).
- max_dep([H|T],M,R):-max_dep(H,M,R1),max_dep(T,R1,R).
- max_p([H|T],R):-atomic(H),max_dep(T,H,R).
- max_p([H|T],R):-max_p(H,R1),max_dep(T,R1,R).
- %sorteaza dupa codu ascii
- sort_chars([H|T],R):-sort_chars(T,R1),!,ins_sort_chars(H,R1,R).
- sort_chars([],[]):-!.
- ins_sort_chars(X,[H|T],[H|R]):-char_cmp(X,H,R1),1 is R1,ins_sort_chars(X,T,R).
- ins_sort_chars(X,T,[X|T]).
- sort_len([H|T],R):-sort_len(T,R1),!,ins_sort_len(H,R1,R).
- sort_len([],[]):-!.
- ins_sort_len(X,[H|T],[H|R]):-length(X,0,L1),length(H,0,L2),L1>L2,ins_sort_len(X,T,R),!.
- ins_sort_len(X,T,[X|T]):-!.
- :-dynamic neighbor/2. % declarăm predicatul dinamic pentru a putea
- %etc.
- neighb_to_edge:-retract(neighbor(Node,List)),!, %extrage un predicat neighbor și apoi îl procesează
- process(Node,List),
- neighb_to_edge.
- neighb_to_edge. % daca nu mai sunt predicate neighbor înseamnă că am terminat
- % procesarea presupune adăugare de predicate edge și node pentru un predicat neighbor
- process(Node, [H|T]):- assertz(edge(Node, H)), process(Node, T).
- process(Node, []):- assertz(node(Node)).
- :-dynamic edge/2.
- :-dynamic node/1.
- node(a).
- node(b).
- node(c).
- node(d).
- edge(a, b).
- edge(a, d).
- edge(b, a).
- edge(b, c).
- edge(b, d).
- edge(c, b).
- edge(c, d).
- edge_to_neighb:- retract(node(A)),assertz(neighbor(A,[])),edge_to_neighb.
- edge_to_neighb:- retract(edge(A,B)),retract(neighbor(A,L)),
- assertz(neighbor(A,[B|L])),edge_to_neighb.
- edge_to_neighb.
- replace_all2(_,_,[],[]).
- replace_all2(X,Y,[X|T],[Y|R]):-replace_all2(X,Y,T,R).
- replace_all2(X,Y,[H|T],[H|R]):- atomic(H),replace_all2(X,Y,T,R).
- replace_all2(X,Y,[H|T],R):- replace_all2(X,Y,H,R1),replace_all2(X,Y,T,R2),add_first(R1,R2,R).
- sum_k([],_,_,Acc,Acc):-!.
- sum_k([H|T],A,K,Acc,R):-A is K,atomic(H),Acc1 is Acc+H,sum_k(T,A,K,Acc1,R),!.
- sum_k([H|T],A,K,Acc,R):-atomic(H),sum_k(T,A,K,Acc,R),!.
- sum_k([H|T],A,K,Acc,R):-A1 is A+1,sum_k(H,A1,K,Acc,R1),sum_k(T,A,K,R1,R),!.
- sum_k_pretty(T,K,R):-sum_k(T,1,K,0,R).
- collect_k(t(K,L,R),A,N,Acc,Rez):-A is N,A1 is A+1,collect_k(L,A1,N,[K|Acc],R1),collect_k(R,A1,N,R1,Rez),!.
- collect_k(t(K,L,R),A,N,Acc,Rez):-A1 is A+1,collect_k(L,A1,N,Acc,R1),collect_k(R,A1,N,R1,Rez),!.
- collect_k(nil,_,_,Acc,Acc):-!.
- collect_k_pretty(t(K,L,R),N,Rez):-collect_k(t(K,L,R),1,N,[],Rez),!.
- insert_key(Key,nil,t(Key,nil,nil)).
- insert_key(Key,t(Key,L,R),t(Key,L,R)).
- insert_key(Key,t(K,L,R),t(K,NL,R)):-Key<K,!,insert_key(Key,L,NL).
- insert_key(Key,t(K,L,R),t(K,L,NR)):-insert_key(Key,R,NR).
- delete_key(Key,t(Key,L,nil),L):-!.
- delete_key(Key,t(Key,nil,R),R):-!.
- delete_key(Key,t(Key,L,R),t(Pred,NL,R)):-get_pred(L,Pred,NL).
- delete_key(Key,t(Key,L,R),t(Key,NL,R)):-Key<K,delete_key(Key,L,NL).
- delete_key(Key,t(Key,L,R),t(Key,L,NR)):-delete_key(Key,R,NR).
- get_pred(t(Pred,L,nil),Pred,L).
- get_pred(t(Key,L,R),Pred,t(Key,L,NR)):-get_pred(R,Pred,NR).
- extract_even(t(K,L,R),A,Acc,Rez):- 0 is A mod 2, 0 is K mod 2,A1 is A+1,
- extract_even(L,A1,[K|Acc],R1),extract_even(R,A1,R1,Rez).
- extract_even(t(K,L,R),A,Acc,Rez):-A1 is A+1,extract_even(L,A1,Acc,R1),
- extract_even(R,A1,R1,Rez).
- extract_even(nil,_,Acc,Acc).
- extract_even_pretty(t(K,L,R),Rez):-extract_even(t(K,L,R),1,[],Rez).
- extract_even_dif(t(K,L,R),A,RS,RE):-0 is A mod 2, 0 is K mod 2,A1 is A+1,
- extract_even_dif(L,A1,LLS,LLE),
- extract_even_dif(R,A1,LRS,LRE),
- RS=[K|LLS],LLE=LRS,RE=LRE.
- extract_even_dif(t(_,L,R),A,RS,RE):-A1 is A+1,
- extract_even_dif(L,A1,LLS,LLE),
- extract_even_dif(R,A1,LRS,LRE),
- RS=LLS,LLE=LRS,RE=LRE.
- extract_even_dif(nil,_,L,L).
- collect_kf(t(K,nil,nil),[K]).
- collect_kf(t(K,L,nil),Rez):-collect_kf(L,Rez).
- collect_kf(t(K,nil,R),Rez):-collect_kf(R,Rez).
- collect_kf(t(_,L,R),Rez):-collect_kf(L,R1),collect_kf(R,R2),append(R1,R2,Rez).
- :-dynamic arc/2.
- :-dynamic nod/1.
- nod(1).
- nod(2).
- nod(3).
- arc(2,1).
- arc(1,2).
- arc(3,1).
- grad_interior(K,Acc,R):-retract(arc(_,K)),Acc1 is Acc+1,grad_interior(K,Acc1,R).
- grad_interior(K,Acc,Acc).
- grad_interior_pretty(K,R):-grad_interior(K,0,R).
- grad_exterior(K,Acc,R):-retract(arc(K,_)),Acc1 is Acc+1,grad_exterior(K,Acc1,R).
- grad_exterior(K,Acc,Acc).
- grad_exterior_pretty(K,R):-grad_exterior(K,0,R).
- collect(R):-retract(nod(K)),collect(R1),R=[K|R1].
- collect([]).
- suma_tot([],_,_,Acc,Acc).
- suma_tot([H|T],M,K,Acc,R):-atomic(H),K is M, Acc1 is Acc+H,suma_tot(T,M,K,Acc1,R).
- suma_tot([H|T],M,K,Acc,R):-atomic(H),suma_tot(T,M,K,Acc,R).
- suma_tot([H|T],M,K,Acc,R):-K1 is K+1,suma_tot(H,M,K1,Acc,R1),suma_tot(T,M,K,R1,R).
- suma(L,R):-adancime(L,R1),suma_tot(L,R1,1,0,R).
- numar(t(_,L,R,N),N):- var(L),var(R),N is 1.
- numar(t(_,L,R,N),N):-var(R),numar(L,R1),N is R1+1.
- numar(t(_,L,R,N),N):-var(L),numar(R,R1),N is R1+1.
- numar(t(_,L,R,N),N):-numar(L,R1),numar(R,R2),N is R1+R2+1.
- :-dynamic muchie/3.
- muchie(a,b,1).
- muchie(a,c,12).
- muchie(b,d,2).
- muchie(c,d,11).
- muchie(d,e,4).
- muchie(d,f,9).
- muchie(e,g,1).
- muchie(f,g,2).
- destinatiip(A,M,C,Acc,R):-C=<M,retract(muchie(A,B,N)),C1 is C+N,
- Acc1=[A|Acc],destinatiip(B,M,C1,Acc1,R).
- destinatiip(A,M,C,Acc,R):-C=<M,retract(muchie(B,A,N)),C1 is C+N,
- Acc1=[A|Acc],destinatiip(B,M,C1,Acc1,R).
- destinatiip(A,_,_,Acc,Acc).
- destinatii(A,M,R):-destinatiip(A,M,0,[],R).
- cmmdc(X,0,X).
- cmmdc(X,Y,Z):- Rest is X mod Y, cmmdc(Y,Rest,Z).
- cmmmc(X,Y,Z):-cmmdc(X,Y,Rez),Prod is X * Y, Z is Prod / Rez.
- suma2([],0).
- suma2([H|T],R):-suma2(T,R1), R is R1 + H.
- extractie([],[],[]).
- extractie([H|T],[H1|P1],I1):- Ve is H mod 2, Ve = 0,H1=H, extractie(T,P1,I1).
- extractie([H|T],P1,[H2|I1]):- Ve is H mod 2, Ve = 1,H2=H, extractie(T,P1,I1).
- inlocuire(_,_,[],[]).
- inlocuire(X,Y,[H|T],R):- H=X, inlocuire(X,Y,T,T1),R=[Y|T1].
- inlocuire(X,Y,[H|T],R):- H=Y, inlocuire(X,Y,T,T1),R=[X|T1].
- inlocuire(X,Y,[H|T],R):- inlocuire(X,Y,T,T1),R=[H|T1].
- divizibil(H,K):- R is H mod K, R=0.
- st([H|T],K,R):- divizibil(H,K),!,st(T,K,R).
- st([H1|T1],K,[H1|T2]):- st(T1,K,T2).
- st([],_,[]).
- st1(Contor,[H|T],K,R):- divizibil(Contor,K),Contor1 is Contor +1,!,st1(Contor1,T,K,R).
- st1(Contor,[H1|T1],K,[H1|T2]):- Contor1 is Contor +1,st1(Contor1,T1,K,T2).
- st1(_,[],_,[]).
- %
- append([],L,L).
- append([H|T],L,R):-append(T,L,R1), R=[H|R1].
- append3(L1,L2,L3,R):-append(L1,L2,R1),append(R1,L3,R).
- member(X,[X|_]).
- member(X,[_|T]):- member(X,T).
- fact(0,1).
- fact(N,F):- N1 is N -1 ,fact(N1,F1), F is N * F1.
- delete_e(X,[X|T],T).
- delete_e(X,[H|T],[H|R]):-delete_e(X,T,R).
- delete_e(_,[],[]).
- delete_tot(X,[X|T],R):-delete_tot(X,T,R).
- delete_tot(X,[H|T],[H|R]):-delete_tot(X,T,R).
- delete_tot(_,[],[]).
- adauga_inceput(X,[],[X]).
- adauga_inceput(X,L,[X|L]).
- suma1([],0).
- suma1([H|T],R):- suma1(T,R1), R is R1 + H.
- p_i([],[],[]).
- p_i([H|T],[H|P],I):- R is H mod 2, R = 0, p_i(T,P,I).
- p_i([H|T],P,[H|I]):- R is H mod 2, R = 1, p_i(T,P,I).
- inverseazaa(_,_,[],[]).
- inverseazaa(X,Y,[H|T],[Y|R]):- H=X, inverseazaa(X,Y,T,R).
- inverseazaa(X,Y,[H|T],[X|R]):- H=Y, inverseazaa(X,Y,T,R).
- inverseazaa(X,Y,[H|T],[H|R]):- inverseazaa(X,Y,T,R).
- inv(_,_,[],[]).
- inv(X,Y,[H|T],[Y|R]):- H=X,inv(X,Y,T,R).
- inv(X,Y,[H|T],[H|R]):- inv(X,Y,T,R).
- sterg_duplicat([],[]).
- sterg_duplicat([H|T],R):- member(H,T),!, sterg_duplicat(T,R).
- sterg_duplicat([H|T],[H|R]):-sterg_duplicat(T,R).
- lung_lista([],0).
- lung_lista([H|T],R):-lung_lista(T,R1), R is R1 +1.
- inversare_lista([],[]).
- inversare_lista([H|T],R):-inversare_lista(T,R1),append(R1,[H],R).
- min1([H|T],M):-min1(T,M),M<H,!.
- min1([H|_],H).
- reuniune([],L,L).
- reuniune([H|T],L,R):- member(H,L),!, reuniune(T,L,R).
- reuniune([H|T],L,[H|R]):-reuniune(T,L,R).
- intersectie([],L,[]).
- intersectie([H1|T1],L,R):-member(H1,L),intersectie(T1,L,R1),R=[H1|R1].
- intersectie([H1|T1],L,R):-not(member(H1,L)),intersectie(T1,L,R).
- diferenta([],L,[]).
- diferenta([H|T],L,R):-member(H,L),diferenta(T,L,R).
- diferenta([H|T],L,R):-not(member(H,L)),diferenta(T,L,R1),R=[H|R1].
- minim_a([H|T],M):-minim_a(T,M),M<H,!.
- minim_a([H|_],H).
- max_a([H|T],M):-max_a(T,M),M>H,!.
- max_a([H|_],H).
- sterge_aparitii(_,[],[]).
- sterge_aparitii(K,[H|T],R):-H=K,sterge_aparitii(K,T,R).
- sterge_aparitii(K,[H|T],[H|R]):-sterge_aparitii(K,T,R).
- sterge_min([],[]).
- sterge_min(L,R):-minim_a(L,M),sterge_aparitii(M,L,R).
- max_e(A,B,A):- A > B.
- max_e(A,B,B):- A < B.
- imbricare_adanca([],1).
- imbricare_adanca([H|T],R):-atomic(H),!,imbricare_adanca(T,R).
- imbricare_adanca([H|T],R):-imbricare_adanca(H,R1),imbricare_adanca(T,R2),R3 is R1 +1, max_e(R3,R2,R).
- aplatizare([],[]).
- aplatizare([H|T],[H|R]):-atomic(H),!,aplatizare(T,R).
- aplatizare([H|T],R):-aplatizare(H,R1),aplatizare(T,R2),append(R1,R2,R).
- member_adanc(H,[H|_]).
- member_adanc(X,[H|_]):-member_adanc(X,H).
- member_adanc(X,[_|T]):-member_adanc(X,T).
- nr_atomi([],0).
- nr_atomi([H|T],R):-atomic(H),!,nr_atomi(T,R1),R is R1+1.
- nr_atomi([H|T],R):-nr_atomi(H,R1),nr_atomi(T,R2),R is R1+R2.
- suma_adanca([],0).
- suma_adanca([H|T],R):-atomic(H),!,suma_adanca(T,R1),R is R1+H.
- suma_adanca([H|T],R):-suma_adanca(H,R1),suma_adanca(T,R2),R is R1+R2.
- member_adanc(H,[H|_]).
- member_adanc(X,[H|_]):-member_adanc(X,H).
- member_adanc(X,[_|T]):-member_adanc(X,T).
- member_in(_,L):-val(L),!,fail.
- member_in(X,[X|_]):-!.
- member_in(X,[_|T]):-member_in(X,T).
- insert_in(X,L):-var(L),!,L=[X|_].
- insert_in(X,[X|_]):-!.
- insert_in(X,[_|T]):-insert_in(X,T).
- delete_in(_,L,L):-var(L),!.
- delete_in(X,[X|T],T):-!.
- delete_in(X,[H|T],[H|R]):-delete_in(X,T,R).
- append_in(L1,L2,L2):-var(L1),!.
- append_in([H|T],L,[H|R]):-append_in(T,L,R).
- inverseaza_in(L,L):-var(L),!.
- inverseaza_in([H|T],R):-inverseaza_in(T,R1),append_in(R1,[H],R).
- %arbori
- %calculeaza toate frunzele intr-un arbore
- colect(nil,[]).
- colect(t(K,nil,nil),[K]).
- colect(t(_,L,R),L):-colect(L,LL),colect(R,LR),append(LL,LR,L).
- inverseaza_completa([H|T],R):- inverseaza_completa(T,R1),append(R1,[H],R).
- inverseaza_completa([],[]).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement