Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.68 KB | None | 0 0
  1. tree(t(6, t(4, t(2, nil, nil), t(5, nil, nil)), t(9, t(7, nil, nil), nil))).
  2. tree_i(t(6, t(4, t(2, _, _), t(5, _, _)), t(9, t(7, _, _), _))).
  3. tree2(t(a,t(b,t(d,t(g,_,_,_),t(h,_,_,_),_),t(e,_,_,_),_),t(c,_,t(f,t(i,_,_,_),t(j,_,_,_),_),_),_)).
  4. cmmdc(A,B,A):-A=B.
  5. cmmdc(A,B,R):-B>A,R1 is B-A ,cmmdc(A,R1,R).
  6. cmmdc(A,B,R):-A>B,R1 is A-B,cmmdc(R1,B,R).
  7.  
  8.  
  9.  
  10. cmmmc(A,B,R):-R1 is A*B,cmmdc(A,B,R2),R is R1 / R2.
  11.  
  12.  
  13.  
  14. sum([],0).
  15. sum([H|K],R):-sum(K,R1),R is R1+H.
  16.  
  17.  
  18.  
  19. add_first(X,L,R):- R=[X|L].
  20.  
  21.  
  22. %numere pare
  23. separate_parity([],[],[]).
  24. separate_parity([H|K],E,O):-1 is H mod 2, separate_parity(K,E,R),O=[H|R].
  25. separate_parity([H|K],E,O):-separate_parity(K,R,O),E=[H|R].
  26.  
  27.  
  28. %inclocuim aparitiilelui x cu y
  29.  
  30. replace_all(_,_,[],[]):-!.
  31. replace_all(X,Y,[X|K],[Y|R]):-replace_all(X,Y,K,R),!.
  32. replace_all(X,Y,[H|K],[H|R]):-replace_all(X,Y,K,R),!.
  33.  
  34.  
  35. %sterge elem de pe pozitiile divizibile k
  36.  
  37.  
  38. sterge_k_1([],_,_,[]):-!.
  39. sterge_k_1([_|K],X,C,R):-0 is C mod X,C1 is C+1,!,sterge_k_1(K,X,C1,R).
  40. sterge_k_1([H|K],X,C,[H|R]):-C1 is C+1,sterge_k_1(K,X,C1,R).
  41. sterge_k(L,X,R):-sterge_k_1(L,X,1,R).
  42.  
  43.  
  44. %inverseaza incompleta
  45.  
  46. append_li(L,L2,L2):-var(L),!.
  47. append_li([H|T],L2,[H|R]):-append_li(T,L2,R).
  48.  
  49. reverse_li(L,_):-var(L),!.
  50. reverse_li([H|T],R):-reverse_li(T,R1),!,append_li(R1,[H|_],R).
  51.  
  52. %inverseaza completa
  53.  
  54. reverse1([],[]):-!.
  55. reverse1([H|T],R):-reverse1(T,R1),!,append(R1,[H],R).
  56.  
  57. %max dintre a si b
  58.  
  59. max(A,B,A):-A>B.
  60. max(_,B,B).
  61.  
  62.  
  63. %adancimea maxima a unei liste imbricate
  64. adancime([],1).
  65. adancime([H|T],R):-atomic(H),adancime(T,R).
  66. adancime([H|T],R):-adancime(H,R1),adancime(T,R2),R3 is R1+1,max(R2,R3,R).
  67.  
  68. %aplatizarea unei liste imbricate cu lista completa
  69.  
  70. flat([],[]).
  71. flat([H|T],[H|R]):-atomic(H),flat(T,R).
  72. flat([H|T],R):-flat(H,R1),flat(T,R2),append(R1,R2,R).
  73.  
  74. %aplatizarea unei liste imbricate cu lista incompleta
  75.  
  76. flat_li(L,_):-var(L),!.
  77. flat_li([H|T],[H|R]):-atomic(H),!,flat_li(T,R).
  78. flat_li([H|T],R):-flat_li(H,R1),flat_li(T,R2),append_li(R1,R2,R).
  79.  
  80. %adancimea unui arbore cu completa
  81.  
  82. adancimeT(nil,0):-!.
  83. adancimeT(t(_,L,R),Rez):-adancimeT(L,R1),adancimeT(R,R2),max(R1,R2,R3),Rez is R3+1,!.
  84.  
  85. %adancimea unui arbore cu incompleta
  86.  
  87. adancimeTI(L,0):-var(L),!.
  88. adancimeTI(t(_,L,R),Rez):-adancimeTI(L,R1),adancimeTI(R,R2),max(R1,R2,R3),Rez is R3+1,!.
  89.  
  90. %colectam noduri cu lista completa
  91.  
  92. inordine(nil,[]).
  93. inordine(t(K,L,R),Rez):-inordine(L,LL),inordine(R,LR),append(LL,[K|LR],Rez).
  94.  
  95. %colectam noduri cu lista diferenta
  96.  
  97. inordine_dif(nil,L,L).
  98. 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.
  99.  
  100. %colectam toate frunzele dintr-un arbore
  101.  
  102. colect(nil,[]).
  103. colect(t(K,nil,nil),[K]).
  104. colect(t(_,L,R),L):-colect(L,LL),colect(R,LR),append(LL,LR,L).
  105.  
  106. %sterge toate elementele x din lista
  107.  
  108. delete_all(_,[],[]):-!.
  109. delete_all(X,[X|T],R):-delete_all(X,T,R),!.
  110. delete_all(X,[H|T],R):-delete_all(X,T,R1),!,R=[H|R1].
  111.  
  112. %stergem elementele duplicate dintr-o lista
  113.  
  114. sterge_duplicate([],[]):-!.
  115. sterge_duplicate([H|T],[H|R]):-member(H,T),delete_all(H,T,R1),sterge_duplicate(R1,R),!.
  116. sterge_duplicate([H|T],[H|R]):-sterge_duplicate(T,R),!.
  117.  
  118. %sterge toate aparitiile minimului si max daca punem >
  119. min([],Min,Min):-!.
  120. min([H|T],Min,R):-H<Min,min(T,H,R),!.
  121. min([_|T],Min,R):-min(T,Min,R).
  122.  
  123. min_pretty([H|T],R):-min(T,H,R).
  124.  
  125. sterge_min(L,R):-min_pretty(L,R1),delete_all(R1,L,R).
  126.  
  127.  
  128. %inverseaza toate elementele dintr-o lista dupa pozitia k
  129.  
  130. reverse_k([],_,[]):-!.
  131. reverse_k(L,0,R1):-reverse1(L,R1),!.
  132. reverse_k([H|T],K,[H|R]):- K1 is K-1, reverse_k(T,K1,R),!.
  133.  
  134. %codifica o lista rle
  135.  
  136. rle_encode([],K,Acc,Acc1):-reverse1(Acc,Acc1),!.
  137. rle_encode([H|T],K,Acc,R):-atomic(T),add_first([H,K],Acc,Acc1),rle_encode([],K,Acc1,R),!.
  138. rle_encode([H|H],K,Acc,R):-atomic(H),K1 is K+1,rle_encode(H,K1,Acc,R),!.
  139. rle_encode([H,H|T],K,Acc,R):-K1 is K+1,rle_encode([H|T],K1,Acc,R),!.
  140. rle_encode([H1,H2|T],1,Acc,R):-add_first(H1,Acc,Acc1),rle_encode([H2|T],1,Acc1,R),!.
  141. rle_encode([H1,H2|T],K,Acc,R):-add_first([H1,K],Acc,Acc1),rle_encode([H2|T],1,Acc1,R),!.
  142.  
  143. rle_encode_pretty(L,R):-rle_encode(L,1,[],R).
  144. %rle_encode
  145. length([],Acc,Acc).
  146. length([H|T],Acc,R):-Acc1 is Acc+1,length(T,Acc1,R).
  147.  
  148. extract_K(_,0,[]).
  149. extract_K([H|T],K,[H|R]):-K1 is K-1, extract_K(T,K1,R).
  150.  
  151. %roteste o lista k pozitii la dreapta
  152.  
  153. rotate_k(L,K,R):-length(L,0,Len),reverse1(L,R1),
  154. extract_K(R1,K,R2),reverse1(R2,R3),K1 is Len-K, extract_K(L,K1,R4),
  155. append(R3,R4,R).
  156.  
  157.  
  158.  
  159. ins_sort([H|T],R):-ins_sort(T,R1),insert_ord(H,R1,R).
  160. ins_sort([],[]).
  161.  
  162. insert_ord(X,[H|T],[H|R]):-X>H,insert_ord(X,T,R).
  163. insert_ord(X,T,[X|T]).
  164.  
  165. char_cmp(A,B,1):-char_code(A,H1),char_code(B,H2),H1>H2.
  166. char_cmp(A,B,0).
  167.  
  168. max_dep([],M,M).
  169. max_dep([H|T],M,R):-atomic(H),H>M,max_dep(T,H,R).
  170. max_dep([H|T],M,R):-atomic(H),max_dep(T,M,R).
  171. max_dep([H|T],M,R):-max_dep(H,M,R1),max_dep(T,R1,R).
  172.  
  173. max_p([H|T],R):-atomic(H),max_dep(T,H,R).
  174. max_p([H|T],R):-max_p(H,R1),max_dep(T,R1,R).
  175.  
  176.  
  177.  
  178. %sorteaza dupa codu ascii
  179.  
  180. sort_chars([H|T],R):-sort_chars(T,R1),!,ins_sort_chars(H,R1,R).
  181. sort_chars([],[]):-!.
  182.  
  183.  
  184.  
  185. ins_sort_chars(X,[H|T],[H|R]):-char_cmp(X,H,R1),1 is R1,ins_sort_chars(X,T,R).
  186. ins_sort_chars(X,T,[X|T]).
  187.  
  188. sort_len([H|T],R):-sort_len(T,R1),!,ins_sort_len(H,R1,R).
  189. sort_len([],[]):-!.
  190.  
  191. ins_sort_len(X,[H|T],[H|R]):-length(X,0,L1),length(H,0,L2),L1>L2,ins_sort_len(X,T,R),!.
  192. ins_sort_len(X,T,[X|T]):-!.
  193.  
  194. :-dynamic neighbor/2. % declarăm predicatul dinamic pentru a putea
  195.  
  196.  
  197. %etc.
  198. neighb_to_edge:-retract(neighbor(Node,List)),!, %extrage un predicat neighbor și apoi îl procesează
  199. process(Node,List),
  200. neighb_to_edge.
  201. neighb_to_edge. % daca nu mai sunt predicate neighbor înseamnă că am terminat
  202. % procesarea presupune adăugare de predicate edge și node pentru un predicat neighbor
  203. process(Node, [H|T]):- assertz(edge(Node, H)), process(Node, T).
  204. process(Node, []):- assertz(node(Node)).
  205.  
  206. :-dynamic edge/2.
  207. :-dynamic node/1.
  208. node(a).
  209. node(b).
  210. node(c).
  211. node(d).
  212. edge(a, b).
  213. edge(a, d).
  214. edge(b, a).
  215. edge(b, c).
  216. edge(b, d).
  217. edge(c, b).
  218. edge(c, d).
  219.  
  220.  
  221. edge_to_neighb:- retract(node(A)),assertz(neighbor(A,[])),edge_to_neighb.
  222. edge_to_neighb:- retract(edge(A,B)),retract(neighbor(A,L)),
  223. assertz(neighbor(A,[B|L])),edge_to_neighb.
  224. edge_to_neighb.
  225.  
  226. replace_all2(_,_,[],[]).
  227. replace_all2(X,Y,[X|T],[Y|R]):-replace_all2(X,Y,T,R).
  228. replace_all2(X,Y,[H|T],[H|R]):- atomic(H),replace_all2(X,Y,T,R).
  229. replace_all2(X,Y,[H|T],R):- replace_all2(X,Y,H,R1),replace_all2(X,Y,T,R2),add_first(R1,R2,R).
  230.  
  231. sum_k([],_,_,Acc,Acc):-!.
  232. sum_k([H|T],A,K,Acc,R):-A is K,atomic(H),Acc1 is Acc+H,sum_k(T,A,K,Acc1,R),!.
  233. sum_k([H|T],A,K,Acc,R):-atomic(H),sum_k(T,A,K,Acc,R),!.
  234. 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),!.
  235.  
  236. sum_k_pretty(T,K,R):-sum_k(T,1,K,0,R).
  237.  
  238. 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),!.
  239. 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),!.
  240. collect_k(nil,_,_,Acc,Acc):-!.
  241.  
  242. collect_k_pretty(t(K,L,R),N,Rez):-collect_k(t(K,L,R),1,N,[],Rez),!.
  243.  
  244. insert_key(Key,nil,t(Key,nil,nil)).
  245. insert_key(Key,t(Key,L,R),t(Key,L,R)).
  246. insert_key(Key,t(K,L,R),t(K,NL,R)):-Key<K,!,insert_key(Key,L,NL).
  247. insert_key(Key,t(K,L,R),t(K,L,NR)):-insert_key(Key,R,NR).
  248.  
  249. delete_key(Key,t(Key,L,nil),L):-!.
  250. delete_key(Key,t(Key,nil,R),R):-!.
  251. delete_key(Key,t(Key,L,R),t(Pred,NL,R)):-get_pred(L,Pred,NL).
  252. delete_key(Key,t(Key,L,R),t(Key,NL,R)):-Key<K,delete_key(Key,L,NL).
  253. delete_key(Key,t(Key,L,R),t(Key,L,NR)):-delete_key(Key,R,NR).
  254.  
  255. get_pred(t(Pred,L,nil),Pred,L).
  256. get_pred(t(Key,L,R),Pred,t(Key,L,NR)):-get_pred(R,Pred,NR).
  257.  
  258. extract_even(t(K,L,R),A,Acc,Rez):- 0 is A mod 2, 0 is K mod 2,A1 is A+1,
  259. extract_even(L,A1,[K|Acc],R1),extract_even(R,A1,R1,Rez).
  260. extract_even(t(K,L,R),A,Acc,Rez):-A1 is A+1,extract_even(L,A1,Acc,R1),
  261. extract_even(R,A1,R1,Rez).
  262. extract_even(nil,_,Acc,Acc).
  263.  
  264. extract_even_pretty(t(K,L,R),Rez):-extract_even(t(K,L,R),1,[],Rez).
  265.  
  266. extract_even_dif(t(K,L,R),A,RS,RE):-0 is A mod 2, 0 is K mod 2,A1 is A+1,
  267. extract_even_dif(L,A1,LLS,LLE),
  268. extract_even_dif(R,A1,LRS,LRE),
  269. RS=[K|LLS],LLE=LRS,RE=LRE.
  270. extract_even_dif(t(_,L,R),A,RS,RE):-A1 is A+1,
  271. extract_even_dif(L,A1,LLS,LLE),
  272. extract_even_dif(R,A1,LRS,LRE),
  273. RS=LLS,LLE=LRS,RE=LRE.
  274. extract_even_dif(nil,_,L,L).
  275.  
  276. collect_kf(t(K,nil,nil),[K]).
  277. collect_kf(t(K,L,nil),Rez):-collect_kf(L,Rez).
  278. collect_kf(t(K,nil,R),Rez):-collect_kf(R,Rez).
  279. collect_kf(t(_,L,R),Rez):-collect_kf(L,R1),collect_kf(R,R2),append(R1,R2,Rez).
  280.  
  281. :-dynamic arc/2.
  282. :-dynamic nod/1.
  283.  
  284. nod(1).
  285. nod(2).
  286. nod(3).
  287. arc(2,1).
  288. arc(1,2).
  289. arc(3,1).
  290.  
  291. grad_interior(K,Acc,R):-retract(arc(_,K)),Acc1 is Acc+1,grad_interior(K,Acc1,R).
  292. grad_interior(K,Acc,Acc).
  293.  
  294. grad_interior_pretty(K,R):-grad_interior(K,0,R).
  295.  
  296. grad_exterior(K,Acc,R):-retract(arc(K,_)),Acc1 is Acc+1,grad_exterior(K,Acc1,R).
  297. grad_exterior(K,Acc,Acc).
  298.  
  299. grad_exterior_pretty(K,R):-grad_exterior(K,0,R).
  300.  
  301. collect(R):-retract(nod(K)),collect(R1),R=[K|R1].
  302. collect([]).
  303.  
  304. suma_tot([],_,_,Acc,Acc).
  305. suma_tot([H|T],M,K,Acc,R):-atomic(H),K is M, Acc1 is Acc+H,suma_tot(T,M,K,Acc1,R).
  306. suma_tot([H|T],M,K,Acc,R):-atomic(H),suma_tot(T,M,K,Acc,R).
  307. 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).
  308.  
  309. suma(L,R):-adancime(L,R1),suma_tot(L,R1,1,0,R).
  310.  
  311. numar(t(_,L,R,N),N):- var(L),var(R),N is 1.
  312. numar(t(_,L,R,N),N):-var(R),numar(L,R1),N is R1+1.
  313. numar(t(_,L,R,N),N):-var(L),numar(R,R1),N is R1+1.
  314. numar(t(_,L,R,N),N):-numar(L,R1),numar(R,R2),N is R1+R2+1.
  315.  
  316. :-dynamic muchie/3.
  317.  
  318. muchie(a,b,1).
  319. muchie(a,c,12).
  320. muchie(b,d,2).
  321. muchie(c,d,11).
  322. muchie(d,e,4).
  323. muchie(d,f,9).
  324. muchie(e,g,1).
  325. muchie(f,g,2).
  326.  
  327. destinatiip(A,M,C,Acc,R):-C=<M,retract(muchie(A,B,N)),C1 is C+N,
  328. Acc1=[A|Acc],destinatiip(B,M,C1,Acc1,R).
  329. destinatiip(A,M,C,Acc,R):-C=<M,retract(muchie(B,A,N)),C1 is C+N,
  330. Acc1=[A|Acc],destinatiip(B,M,C1,Acc1,R).
  331. destinatiip(A,_,_,Acc,Acc).
  332.  
  333. destinatii(A,M,R):-destinatiip(A,M,0,[],R).
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383. cmmdc(X,0,X).
  384. cmmdc(X,Y,Z):- Rest is X mod Y, cmmdc(Y,Rest,Z).
  385.  
  386. cmmmc(X,Y,Z):-cmmdc(X,Y,Rez),Prod is X * Y, Z is Prod / Rez.
  387.  
  388. suma2([],0).
  389. suma2([H|T],R):-suma2(T,R1), R is R1 + H.
  390.  
  391. extractie([],[],[]).
  392. extractie([H|T],[H1|P1],I1):- Ve is H mod 2, Ve = 0,H1=H, extractie(T,P1,I1).
  393. extractie([H|T],P1,[H2|I1]):- Ve is H mod 2, Ve = 1,H2=H, extractie(T,P1,I1).
  394.  
  395. inlocuire(_,_,[],[]).
  396. inlocuire(X,Y,[H|T],R):- H=X, inlocuire(X,Y,T,T1),R=[Y|T1].
  397. inlocuire(X,Y,[H|T],R):- H=Y, inlocuire(X,Y,T,T1),R=[X|T1].
  398. inlocuire(X,Y,[H|T],R):- inlocuire(X,Y,T,T1),R=[H|T1].
  399.  
  400.  
  401.  
  402. divizibil(H,K):- R is H mod K, R=0.
  403. st([H|T],K,R):- divizibil(H,K),!,st(T,K,R).
  404. st([H1|T1],K,[H1|T2]):- st(T1,K,T2).
  405. st([],_,[]).
  406.  
  407.  
  408. st1(Contor,[H|T],K,R):- divizibil(Contor,K),Contor1 is Contor +1,!,st1(Contor1,T,K,R).
  409. st1(Contor,[H1|T1],K,[H1|T2]):- Contor1 is Contor +1,st1(Contor1,T1,K,T2).
  410. st1(_,[],_,[]).
  411.  
  412. %
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419. append([],L,L).
  420. append([H|T],L,R):-append(T,L,R1), R=[H|R1].
  421.  
  422. append3(L1,L2,L3,R):-append(L1,L2,R1),append(R1,L3,R).
  423.  
  424. member(X,[X|_]).
  425. member(X,[_|T]):- member(X,T).
  426.  
  427. fact(0,1).
  428. fact(N,F):- N1 is N -1 ,fact(N1,F1), F is N * F1.
  429.  
  430. delete_e(X,[X|T],T).
  431. delete_e(X,[H|T],[H|R]):-delete_e(X,T,R).
  432. delete_e(_,[],[]).
  433.  
  434. delete_tot(X,[X|T],R):-delete_tot(X,T,R).
  435. delete_tot(X,[H|T],[H|R]):-delete_tot(X,T,R).
  436. delete_tot(_,[],[]).
  437.  
  438. adauga_inceput(X,[],[X]).
  439. adauga_inceput(X,L,[X|L]).
  440.  
  441. suma1([],0).
  442. suma1([H|T],R):- suma1(T,R1), R is R1 + H.
  443.  
  444. p_i([],[],[]).
  445. p_i([H|T],[H|P],I):- R is H mod 2, R = 0, p_i(T,P,I).
  446. p_i([H|T],P,[H|I]):- R is H mod 2, R = 1, p_i(T,P,I).
  447.  
  448. inverseazaa(_,_,[],[]).
  449. inverseazaa(X,Y,[H|T],[Y|R]):- H=X, inverseazaa(X,Y,T,R).
  450. inverseazaa(X,Y,[H|T],[X|R]):- H=Y, inverseazaa(X,Y,T,R).
  451. inverseazaa(X,Y,[H|T],[H|R]):- inverseazaa(X,Y,T,R).
  452.  
  453. inv(_,_,[],[]).
  454. inv(X,Y,[H|T],[Y|R]):- H=X,inv(X,Y,T,R).
  455. inv(X,Y,[H|T],[H|R]):- inv(X,Y,T,R).
  456.  
  457.  
  458. sterg_duplicat([],[]).
  459. sterg_duplicat([H|T],R):- member(H,T),!, sterg_duplicat(T,R).
  460. sterg_duplicat([H|T],[H|R]):-sterg_duplicat(T,R).
  461.  
  462. lung_lista([],0).
  463. lung_lista([H|T],R):-lung_lista(T,R1), R is R1 +1.
  464.  
  465.  
  466. inversare_lista([],[]).
  467. inversare_lista([H|T],R):-inversare_lista(T,R1),append(R1,[H],R).
  468.  
  469. min1([H|T],M):-min1(T,M),M<H,!.
  470. min1([H|_],H).
  471.  
  472.  
  473. reuniune([],L,L).
  474. reuniune([H|T],L,R):- member(H,L),!, reuniune(T,L,R).
  475. reuniune([H|T],L,[H|R]):-reuniune(T,L,R).
  476.  
  477. intersectie([],L,[]).
  478. intersectie([H1|T1],L,R):-member(H1,L),intersectie(T1,L,R1),R=[H1|R1].
  479. intersectie([H1|T1],L,R):-not(member(H1,L)),intersectie(T1,L,R).
  480.  
  481.  
  482. diferenta([],L,[]).
  483. diferenta([H|T],L,R):-member(H,L),diferenta(T,L,R).
  484. diferenta([H|T],L,R):-not(member(H,L)),diferenta(T,L,R1),R=[H|R1].
  485.  
  486.  
  487. minim_a([H|T],M):-minim_a(T,M),M<H,!.
  488. minim_a([H|_],H).
  489.  
  490. max_a([H|T],M):-max_a(T,M),M>H,!.
  491. max_a([H|_],H).
  492.  
  493. sterge_aparitii(_,[],[]).
  494. sterge_aparitii(K,[H|T],R):-H=K,sterge_aparitii(K,T,R).
  495. sterge_aparitii(K,[H|T],[H|R]):-sterge_aparitii(K,T,R).
  496.  
  497. sterge_min([],[]).
  498. sterge_min(L,R):-minim_a(L,M),sterge_aparitii(M,L,R).
  499.  
  500. max_e(A,B,A):- A > B.
  501. max_e(A,B,B):- A < B.
  502.  
  503.  
  504. imbricare_adanca([],1).
  505. imbricare_adanca([H|T],R):-atomic(H),!,imbricare_adanca(T,R).
  506. imbricare_adanca([H|T],R):-imbricare_adanca(H,R1),imbricare_adanca(T,R2),R3 is R1 +1, max_e(R3,R2,R).
  507.  
  508.  
  509. aplatizare([],[]).
  510. aplatizare([H|T],[H|R]):-atomic(H),!,aplatizare(T,R).
  511. aplatizare([H|T],R):-aplatizare(H,R1),aplatizare(T,R2),append(R1,R2,R).
  512.  
  513. member_adanc(H,[H|_]).
  514. member_adanc(X,[H|_]):-member_adanc(X,H).
  515. member_adanc(X,[_|T]):-member_adanc(X,T).
  516.  
  517.  
  518. nr_atomi([],0).
  519. nr_atomi([H|T],R):-atomic(H),!,nr_atomi(T,R1),R is R1+1.
  520. nr_atomi([H|T],R):-nr_atomi(H,R1),nr_atomi(T,R2),R is R1+R2.
  521.  
  522.  
  523. suma_adanca([],0).
  524. suma_adanca([H|T],R):-atomic(H),!,suma_adanca(T,R1),R is R1+H.
  525. suma_adanca([H|T],R):-suma_adanca(H,R1),suma_adanca(T,R2),R is R1+R2.
  526.  
  527. member_adanc(H,[H|_]).
  528. member_adanc(X,[H|_]):-member_adanc(X,H).
  529. member_adanc(X,[_|T]):-member_adanc(X,T).
  530.  
  531.  
  532.  
  533.  
  534. member_in(_,L):-val(L),!,fail.
  535. member_in(X,[X|_]):-!.
  536. member_in(X,[_|T]):-member_in(X,T).
  537.  
  538.  
  539.  
  540. insert_in(X,L):-var(L),!,L=[X|_].
  541. insert_in(X,[X|_]):-!.
  542. insert_in(X,[_|T]):-insert_in(X,T).
  543.  
  544.  
  545. delete_in(_,L,L):-var(L),!.
  546. delete_in(X,[X|T],T):-!.
  547. delete_in(X,[H|T],[H|R]):-delete_in(X,T,R).
  548.  
  549. append_in(L1,L2,L2):-var(L1),!.
  550. append_in([H|T],L,[H|R]):-append_in(T,L,R).
  551.  
  552.  
  553. inverseaza_in(L,L):-var(L),!.
  554. inverseaza_in([H|T],R):-inverseaza_in(T,R1),append_in(R1,[H],R).
  555.  
  556.  
  557.  
  558. %arbori
  559.  
  560. %calculeaza toate frunzele intr-un arbore
  561.  
  562. colect(nil,[]).
  563. colect(t(K,nil,nil),[K]).
  564. colect(t(_,L,R),L):-colect(L,LL),colect(R,LR),append(LL,LR,L).
  565.  
  566.  
  567.  
  568.  
  569. inverseaza_completa([H|T],R):- inverseaza_completa(T,R1),append(R1,[H],R).
  570. inverseaza_completa([],[]).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement