Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 9.00 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. cmmmc(A,B,R):-R1 is A*B,cmmdc(A,B,R2),R is R1/R2.
  9.  
  10. sum([],0).
  11. sum([H|K],R):-sum(K,R1),R is R1+H.
  12.  
  13. add_first(X,L,R):- R=[X|L].
  14.  
  15. separate_parity([],[],[]).
  16. separate_parity([H|K],E,O):-1 is H mod 2, separate_parity(K,E,R),O=[H|R].
  17. separate_parity([H|K],E,O):-separate_parity(K,R,O),E=[H|R].
  18.  
  19. replace_all(_,_,[],[]):-!.
  20. replace_all(X,Y,[X|K],[Y|R]):-replace_all(X,Y,K,R),!.
  21. replace_all(X,Y,[H|K],[H|R]):-replace_all(X,Y,K,R),!.
  22.  
  23. sterge_k_1([],_,_,[]):-!.
  24. sterge_k_1([_|K],X,C,R):-0 is C mod X,C1 is C+1,!,sterge_k_1(K,X,C1,R).
  25. sterge_k_1([H|K],X,C,[H|R]):-C1 is C+1,sterge_k_1(K,X,C1,R).
  26.  
  27. sterge_k(L,X,R):-sterge_k_1(L,X,1,R).
  28.  
  29. append_li(L,L2,L2):-var(L),!.
  30. append_li([H|T],L2,[H|R]):-append_li(T,L2,R).
  31.  
  32. reverse_li(L,_):-var(L),!.
  33. reverse_li([H|T],R):-reverse_li(T,R1),!,append_li(R1,[H|_],R).
  34.  
  35. reverse1([],[]):-!.
  36. reverse1([H|T],R):-reverse1(T,R1),!,append(R1,[H],R).
  37.  
  38. max(A,B,A):-A>B.
  39. max(_,B,B).
  40.  
  41. adancime([],1).
  42. adancime([H|T],R):-atomic(H),adancime(T,R).
  43. adancime([H|T],R):-adancime(H,R1),adancime(T,R2),R3 is R1+1,max(R2,R3,R).
  44.  
  45. flat([],[]).
  46. flat([H|T],[H|R]):-atomic(H),flat(T,R).
  47. flat([H|T],R):-flat(H,R1),flat(T,R2),append(R1,R2,R).
  48.  
  49. flat_li(L,_):-var(L),!.
  50. flat_li([H|T],[H|R]):-atomic(H),!,flat_li(T,R).
  51. flat_li([H|T],R):-flat_li(H,R1),flat_li(T,R2),append_li(R1,R2,R).
  52.  
  53. adancimeT(nil,0):-!.
  54. adancimeT(t(_,L,R),Rez):-adancimeT(L,R1),adancimeT(R,R2),max(R1,R2,R3),Rez is R3+1,!.
  55.  
  56. adancimeTI(L,0):-var(L),!.
  57. adancimeTI(t(_,L,R),Rez):-adancimeTI(L,R1),adancimeTI(R,R2),max(R1,R2,R3),Rez is R3+1,!.
  58.  
  59. inordine(nil,[]).
  60. inordine(t(K,L,R),Rez):-inordine(L,LL),inordine(R,LR),append(LL,[K|LR],Rez).
  61.  
  62. inordine_dif(nil,L,L).
  63. 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.
  64.  
  65. delete_all(_,[],[]):-!.
  66. delete_all(X,[X|T],R):-delete_all(X,T,R),!.
  67. delete_all(X,[H|T],R):-delete_all(X,T,R1),!,R=[H|R1].
  68.  
  69. sterge_duplicate([],[]):-!.
  70. sterge_duplicate([H|T],[H|R]):-member(H,T),delete_all(H,T,R1),sterge_duplicate(R1,R),!.
  71. sterge_duplicate([H|T],[H|R]):-sterge_duplicate(T,R),!.
  72.  
  73. min([],Min,Min):-!.
  74. min([H|T],Min,R):-H<Min,min(T,H,R),!.
  75. min([_|T],Min,R):-min(T,Min,R).
  76.  
  77. min_pretty([H|T],R):-min(T,H,R).
  78.  
  79. sterge_min(L,R):-min_pretty(L,R1),delete_all(R1,L,R).
  80.  
  81. reverse_k([],_,[]):-!.
  82. reverse_k(L,0,R1):-reverse1(L,R1),!.
  83. reverse_k([H|T],K,[H|R]):- K1 is K-1, reverse_k(T,K1,R),!.
  84.  
  85.  
  86. rle_encode([],K,Acc,Acc1):-reverse1(Acc,Acc1),!.
  87. rle_encode([H|T],K,Acc,R):-atomic(T),add_first([H,K],Acc,Acc1),rle_encode([],K,Acc1,R),!.
  88. rle_encode([H|H],K,Acc,R):-atomic(H),K1 is K+1,rle_encode(H,K1,Acc,R),!.
  89. rle_encode([H,H|T],K,Acc,R):-K1 is K+1,rle_encode([H|T],K1,Acc,R),!.
  90. rle_encode([H1,H2|T],1,Acc,R):-add_first(H1,Acc,Acc1),rle_encode([H2|T],1,Acc1,R),!.
  91. rle_encode([H1,H2|T],K,Acc,R):-add_first([H1,K],Acc,Acc1),rle_encode([H2|T],1,Acc1,R),!.
  92.  
  93. rle_encode_pretty(L,R):-rle_encode(L,1,[],R).
  94. %rle_encode
  95. length([],Acc,Acc).
  96. length([H|T],Acc,R):-Acc1 is Acc+1,length(T,Acc1,R).
  97.  
  98. extract_K(_,0,[]).
  99. extract_K([H|T],K,[H|R]):-K1 is K-1, extract_K(T,K1,R).
  100.  
  101. rotate_k(L,K,R):-length(L,0,Len),reverse1(L,R1),
  102.                      extract_K(R1,K,R2),reverse1(R2,R3),K1 is Len-K, extract_K(L,K1,R4),
  103.                      append(R3,R4,R).
  104.  
  105. ins_sort([H|T],R):-ins_sort(T,R1),insert_ord(H,R1,R).
  106. ins_sort([],[]).
  107.  
  108. insert_ord(X,[H|T],[H|R]):-X>H,insert_ord(X,T,R).
  109. insert_ord(X,T,[X|T]).
  110.  
  111. char_cmp(A,B,1):-char_code(A,H1),char_code(B,H2),H1>H2.
  112. char_cmp(A,B,0).
  113.  
  114. max_dep([],M,M).
  115. max_dep([H|T],M,R):-atomic(H),H>M,max_dep(T,H,R).
  116. max_dep([H|T],M,R):-atomic(H),max_dep(T,M,R).
  117. max_dep([H|T],M,R):-max_dep(H,M,R1),max_dep(T,R1,R).
  118.  
  119. max_p([H|T],R):-atomic(H),max_dep(T,H,R).
  120. max_p([H|T],R):-max_p(H,R1),max_dep(T,R1,R).
  121.  
  122. sort_chars([H|T],R):-sort_chars(T,R1),!,ins_sort_chars(H,R1,R).
  123. sort_chars([],[]):-!.
  124.  
  125. ins_sort_chars(X,[H|T],[H|R]):-char_cmp(X,H,R1),1 is R1,ins_sort_chars(X,T,R).
  126. ins_sort_chars(X,T,[X|T]).
  127.  
  128. sort_len([H|T],R):-sort_len(T,R1),!,ins_sort_len(H,R1,R).
  129. sort_len([],[]):-!.
  130.  
  131. ins_sort_len(X,[H|T],[H|R]):-length(X,0,L1),length(H,0,L2),L1>L2,ins_sort_len(X,T,R),!.
  132. ins_sort_len(X,T,[X|T]):-!.
  133.  
  134. :-dynamic neighbor/2. % declarăm predicatul dinamic pentru a putea
  135.  
  136.  
  137. %etc.
  138. neighb_to_edge:-retract(neighbor(Node,List)),!, %extrage un predicat neighbor și apoi îl procesează
  139. process(Node,List),
  140. neighb_to_edge.
  141. neighb_to_edge. % daca nu mai sunt predicate neighbor înseamnă că am terminat
  142. % procesarea presupune adăugare de predicate edge și node pentru un predicat neighbor
  143. process(Node, [H|T]):- assertz(edge(Node, H)), process(Node, T).
  144. process(Node, []):- assertz(node(Node)).
  145.  
  146. :-dynamic edge/2.
  147. :-dynamic node/1.
  148. node(a).
  149. node(b).
  150. node(c).
  151. node(d).
  152. edge(a, b).
  153. edge(a, d).
  154. edge(b, a).
  155. edge(b, c).
  156. edge(b, d).
  157. edge(c, b).
  158. edge(c, d).
  159.  
  160.  
  161. edge_to_neighb:- retract(node(A)),assertz(neighbor(A,[])),edge_to_neighb.
  162. edge_to_neighb:- retract(edge(A,B)),retract(neighbor(A,L)),
  163.                  assertz(neighbor(A,[B|L])),edge_to_neighb.
  164. edge_to_neighb.
  165.  
  166. replace_all2(_,_,[],[]).
  167. replace_all2(X,Y,[X|T],[Y|R]):-replace_all2(X,Y,T,R).
  168. replace_all2(X,Y,[H|T],[H|R]):- atomic(H),replace_all2(X,Y,T,R).
  169. replace_all2(X,Y,[H|T],R):- replace_all2(X,Y,H,R1),replace_all2(X,Y,T,R2),add_first(R1,R2,R).
  170.  
  171. sum_k([],_,_,Acc,Acc):-!.
  172. sum_k([H|T],A,K,Acc,R):-A is K,atomic(H),Acc1 is Acc+H,sum_k(T,A,K,Acc1,R),!.
  173. sum_k([H|T],A,K,Acc,R):-atomic(H),sum_k(T,A,K,Acc,R),!.
  174. 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),!.
  175.  
  176. sum_k_pretty(T,K,R):-sum_k(T,1,K,0,R).
  177.  
  178. 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),!.
  179. 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),!.
  180. collect_k(nil,_,_,Acc,Acc):-!.
  181.  
  182. collect_k_pretty(t(K,L,R),N,Rez):-collect_k(t(K,L,R),1,N,[],Rez),!.
  183.  
  184. insert_key(Key,nil,t(Key,nil,nil)).
  185. insert_key(Key,t(Key,L,R),t(Key,L,R)).
  186. insert_key(Key,t(K,L,R),t(K,NL,R)):-Key<K,!,insert_key(Key,L,NL).
  187. insert_key(Key,t(K,L,R),t(K,L,NR)):-insert_key(Key,R,NR).
  188.  
  189. delete_key(Key,t(Key,L,nil),L):-!.
  190. delete_key(Key,t(Key,nil,R),R):-!.
  191. delete_key(Key,t(Key,L,R),t(Pred,NL,R)):-get_pred(L,Pred,NL).
  192. delete_key(Key,t(Key,L,R),t(Key,NL,R)):-Key<K,delete_key(Key,L,NL).
  193. delete_key(Key,t(Key,L,R),t(Key,L,NR)):-delete_key(Key,R,NR).
  194.  
  195. get_pred(t(Pred,L,nil),Pred,L).
  196. get_pred(t(Key,L,R),Pred,t(Key,L,NR)):-get_pred(R,Pred,NR).
  197.  
  198. extract_even(t(K,L,R),A,Acc,Rez):- 0 is A mod 2, 0 is K mod 2,A1 is A+1,
  199.                                    extract_even(L,A1,[K|Acc],R1),extract_even(R,A1,R1,Rez).
  200. extract_even(t(K,L,R),A,Acc,Rez):-A1 is A+1,extract_even(L,A1,Acc,R1),
  201.                                   extract_even(R,A1,R1,Rez).
  202. extract_even(nil,_,Acc,Acc).
  203.  
  204. extract_even_pretty(t(K,L,R),Rez):-extract_even(t(K,L,R),1,[],Rez).
  205.  
  206. extract_even_dif(t(K,L,R),A,RS,RE):-0 is A mod 2, 0 is K mod 2,A1 is A+1,
  207.                                     extract_even_dif(L,A1,LLS,LLE),
  208.                                     extract_even_dif(R,A1,LRS,LRE),
  209.                                     RS=[K|LLS],LLE=LRS,RE=LRE.
  210. extract_even_dif(t(_,L,R),A,RS,RE):-A1 is A+1,
  211.                                     extract_even_dif(L,A1,LLS,LLE),
  212.                                     extract_even_dif(R,A1,LRS,LRE),
  213.                                     RS=LLS,LLE=LRS,RE=LRE.
  214. extract_even_dif(nil,_,L,L).
  215.  
  216. collect_kf(t(K,nil,nil),[K]).
  217. collect_kf(t(K,L,nil),Rez):-collect_kf(L,Rez).
  218. collect_kf(t(K,nil,R),Rez):-collect_kf(R,Rez).
  219. collect_kf(t(_,L,R),Rez):-collect_kf(L,R1),collect_kf(R,R2),append(R1,R2,Rez).
  220.  
  221. :-dynamic arc/2.
  222. :-dynamic nod/1.
  223.  
  224. nod(1).
  225. nod(2).
  226. nod(3).
  227. arc(2,1).
  228. arc(1,2).
  229. arc(3,1).
  230.  
  231. grad_interior(K,Acc,R):-retract(arc(_,K)),Acc1 is Acc+1,grad_interior(K,Acc1,R).
  232. grad_interior(K,Acc,Acc).
  233.  
  234. grad_interior_pretty(K,R):-grad_interior(K,0,R).
  235.  
  236. grad_exterior(K,Acc,R):-retract(arc(K,_)),Acc1 is Acc+1,grad_exterior(K,Acc1,R).
  237. grad_exterior(K,Acc,Acc).
  238.  
  239. grad_exterior_pretty(K,R):-grad_exterior(K,0,R).
  240.  
  241. collect(R):-retract(nod(K)),collect(R1),R=[K|R1].
  242. collect([]).
  243.  
  244. suma_tot([],_,_,Acc,Acc).
  245. suma_tot([H|T],M,K,Acc,R):-atomic(H),K is M, Acc1 is Acc+H,suma_tot(T,M,K,Acc1,R).
  246. suma_tot([H|T],M,K,Acc,R):-atomic(H),suma_tot(T,M,K,Acc,R).
  247. 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).
  248.  
  249. suma(L,R):-adancime(L,R1),suma_tot(L,R1,1,0,R).
  250.  
  251. numar(t(_,L,R,N),N):- var(L),var(R),N is 1.
  252. numar(t(_,L,R,N),N):-var(R),numar(L,R1),N is R1+1.
  253. numar(t(_,L,R,N),N):-var(L),numar(R,R1),N is R1+1.
  254. numar(t(_,L,R,N),N):-numar(L,R1),numar(R,R2),N is R1+R2+1.
  255.  
  256. :-dynamic muchie/3.
  257.  
  258. muchie(a,b,1).
  259. muchie(a,c,12).
  260. muchie(b,d,2).
  261. muchie(c,d,11).
  262. muchie(d,e,4).
  263. muchie(d,f,9).
  264. muchie(e,g,1).
  265. muchie(f,g,2).
  266.  
  267. destinatiip(A,M,C,Acc,R):-C=<M,retract(muchie(A,B,N)),C1 is C+N,
  268.                           Acc1=[A|Acc],destinatiip(B,M,C1,Acc1,R).
  269. destinatiip(A,M,C,Acc,R):-C=<M,retract(muchie(B,A,N)),C1 is C+N,
  270.                           Acc1=[A|Acc],destinatiip(B,M,C1,Acc1,R).                       
  271. destinatiip(A,_,_,Acc,Acc).
  272.  
  273. destinatii(A,M,R):-destinatiip(A,M,0,[],R).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement