Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 6.14 KB | None | 0 0
  1. % al K lea element din lista L in X
  2. % ( 1 )
  3. extract_k([_|T],K,X) :- K > 0 , CONT is K - 1 , ! , extract_k(T,CONT,X).
  4. extract_k([H|_],K,X) :- K = 0 , X is H.
  5.    
  6. %usage: extract_k([69,12,3,55,23],5,X).
  7.  
  8. % ?- diagonal([[1,2,3],[4,5,6],[7,8,9]], D).
  9. % D = [1, 5, 9].
  10. % ( 2 )
  11. %diagonal_fun([],[],0).
  12. diagonal([H|T],D,K) :- extract_k(H,K,X) ,
  13.                         atomic(X),
  14.                         %writeln(X),
  15.                     append(D,[X],D1),
  16.                     writeln(D1),
  17.                     CONT is K + 1 ,
  18.                     diagonal(T,D1,CONT).
  19.  
  20. %( 1 )
  21. cmmdc(B,B,B).
  22. cmmdc(A,B,C) :- A>B , A1 is A-B , cmmdc(A1,B,C).
  23. cmmdc(A,B,C) :- B>A , B1 is B-A , cmmdc(A,B1,C).
  24.  
  25. %( 2 )
  26. cmmmc(A,B,C) :- cmmdc(A,B,D) , C is A*B/D.
  27.  
  28. %( 3 ) suma
  29. suma([H|T],R) :- suma(T,ACC) , R is ACC + H.
  30. suma([],0).
  31.  
  32. %– suma([1,2,3,4,5], R).
  33.  
  34. % ( 4 )
  35. %? – separate_parity([1,2,3,4,5,6], E, O).
  36. %E = [2,4,6], O=[1,3,5]
  37.  
  38. separate_parity([H|T],E,[H|O]) :- 1 is H mod 2 , separate_parity(T,E,O).
  39. separate_parity([H|T],[H|E],O) :- 0 is H mod 2 , separate_parity(T,E,O).
  40. separate_parity([],[],[]).
  41.  
  42. % ( 5 ) Înlocui?i toate apari?iile lui X cu Y.
  43. %Ex: ? – replace_all(1, a, [1,2,3,1,2], R).
  44.  
  45. replace_all(X,Y,[X|T],[Y|R]) :- replace_all(X,Y,T,R),!.
  46. replace_all(X,Y,[H|T],[H|R]) :- not(H is X),  replace_all(X,Y,T,R).
  47. replace_all(_,_,[],[]).
  48.  
  49. % ( 6 ) ?terge?i elementele de pe pozi?ii divizibile cu K.
  50. %Ex: ? – sterge_k([6,5,4,3,2,1], 3, R).
  51. %R = [6,5,3,2]
  52.  
  53. sterge( [H|T] , K , CONT , [H|R] ) :- CONT < K ,
  54.                                      CONT1 is CONT + 1,
  55.                                      sterge(T,K,CONT1,R) , !.
  56. sterge( [_|T] , K , CONT , R ) :- 0 is CONT mod K , sterge(T,K,1,R).
  57. sterge( [], _ , _ , [] ).
  58.  
  59. sterge_k(L,K,R) :- sterge(L,K,1,R).
  60.  
  61. % ( 7 ) Inverseaza o lista completa/incompleta.
  62. %? – reverse([1, 2, 3, 4, 5], R).
  63. %R = [5, 4, 3, 2, 1].
  64.  
  65. %reverse lista normala cu REC inainte
  66. reverse1([],[]).
  67. reverse1([H|T],R) :- reverse1(T,ACC) , append(ACC,[H],R).
  68.  
  69. reverse_il( L , R , R ) :- var(L),  !.
  70. reverse_il( [H|T] , R , ACC ) :- reverse_il(T,R,[H|ACC]).
  71. % reverse2([1, 2, 3, 4, 5|_], R ).
  72. reverse2( L , R ) :- reverse_il(L,R,_).                  
  73.  
  74. % ( 8 ) Calcula?i adâncimea maxima a unei liste imbricate.
  75. %Ex: ? – adancime([1, [2, [3]], [4]], R1), adancime([], R2).
  76. %R1 = 3, R2 = 1.
  77. %adancime([1, [2, [3]], [4]], R1), adancime([], R2).
  78.  
  79. max(A,B,A) :- A>B , !.
  80. max(_,B,B).
  81.  
  82. adancime([],1).
  83. adancime([H|T],R) :- atomic(H) ,!, adancime(T,R).
  84. adancime([H|T],R) :- adancime(H,R1), adancime(T,R2),
  85.                     R3 is R1 + 1,
  86.                     max(R2,R3,R).
  87.  
  88. % ( 9 ) Aplatiza?i o lista imbricata cu liste complete/incomplete.
  89. %Ex: ? - flat([1, [2, [3]], [4]], R).
  90. %R = [1,2,3,4].
  91.  
  92. flat( [H|T] ,[H|R] ) :- atomic(H) , ! , flat(T,R).
  93. flat( [H|T] , R ) :- flat(H,R1),flat(T,R2),  append(R1,R2,R).
  94. flat( [],[] ).
  95.  
  96. %flat_il([[1|_], 2, [3, [4, 5|_]|_]|_], R).
  97.  
  98. append_il(L,L2,L2):- var(L),!.
  99. append_il([H|T],L2,[H|R]) :- append_il(T,L2,R).
  100.  
  101. flat_il(L,_) :- var(L), !.
  102. flat_il( [H|T] ,[H|R] ) :- atomic(H) , ! , flat_il(T,R).
  103. flat_il( [H|T] , R ) :- flat_il(H,R1),flat_il(T,R2),  append_il(R1,R2,R).
  104. %flat_il( [],[] ).
  105. %flat_il([[1|_], 2, [3, [4, 5|_]|_]|_], R).
  106.  
  107.  
  108. %( 11 ). Colecta?i toate nodurile unui arbore binar complet/incomplet în inordine folosind liste complete/diferen?a.
  109. %tree1(t(6, t(4, t(2, nil, nil), t(5, nil, nil)), t(9, t(7, nil, nil), nil))).
  110. %? – tree(T), inordine(T, R).
  111. %R = [2,4,5,6,7,9].
  112.  
  113. %tree(t(6, t(4, t(2, nil, nil), t(5, nil, nil)), t(9, t(7, nil, nil), nil))).
  114. inorder( t(K,L,R) , LIST ) :- inorder(L,LL) ,
  115.                              inorder(R,LR) ,
  116.                             append(LL,[K|LR],LIST).
  117. inorder( nil , [] ).
  118.  
  119. preoder( t(K,L,R) , LIST ) :- preoder(L,LL) ,
  120.                              preoder(R,LR) ,
  121.                             append([K|LL],LR,LIST).
  122. preoder( nil , [] ).
  123.  
  124. postorder( t(K,L,R) , LIST ) :- postorder(L,LL) ,
  125.                              postorder(R,LR) ,
  126.                             append(LL,LR,R1) ,
  127.                             append(R1,[K],LIST).
  128. postorder( nil , [] ).
  129.  
  130.  
  131. %12. Colectați toate frunzele dintr-un arbore binar.
  132. tree(t(6, t(4, t(2, nil, nil), t(5, nil, nil)), t(9, t(7, nil, nil), nil))).
  133. %? – tree(T), collect_k(T, R).
  134. %R = [2,5,7].
  135. height3(nil, 0).
  136. height3(t(_, L,Mid, R), H):-
  137.     height3(L, H1),
  138.     height3(Mid, H2),
  139.     height3(R, H3),
  140.     max(H1, H2, H4),
  141.     max(H4, H3 ,H5),
  142.     H is H5+1.
  143.  
  144. collect( t(K,nil,nil) , [K] ) :- !.
  145. collect( t(_,L,R) , LIST  ) :-
  146.     collect( L , LL ),
  147.     collect( R , RR ),
  148.     append(LL,RR,LIST).
  149. collect( nil , [] ).
  150.  
  151. count_leaves( t(_,_,_) , 1 ).
  152. count_leaves( t(_,L,R) , CONT ) :-
  153.         count_leaves( L , CONT1 ),
  154.         count_leaves( R , CONT2 ),
  155.         CONT is CONT1 + CONT2.
  156.  
  157.  
  158. height( nil , 0 ).
  159. height( t(_,L,R) , H ) :-
  160.         height(L, H1 ),
  161.         height(R, H2 ),
  162.         max(H1,H2,H3),
  163.         H is H3+1.
  164.  
  165. % Toate ele pare dintr-un arbore binar incomplet/complet
  166. tree2(t(6, t(4, t(2, _, _), t(5, _, _)), t(9, t(7, _, _), _))).
  167.  
  168. %extract_even(T, []):- var(T), !.
  169. extract_even(nil,[]).
  170. extract_even(t(K, L, R),Rez):-
  171.     1 is K mod 2, !,
  172.     extract_even(L,Rez1),
  173.     extract_even(R,Rez2),
  174.     append(Rez1,[K],RezP),
  175.     append(RezP,Rez2,Rez).
  176. extract_even(t(_, L, R),Rez):-
  177.     extract_even(L,Rez1),
  178.     extract_even(R,Rez2),
  179.     append(Rez1,Rez2,Rez).
  180.  
  181.  
  182. max(A,B,A):-A>B.
  183. max(_,B,B).
  184.  
  185. adancime([],1).
  186. adancime([H|T],R):-atomic(H),adancime(T,R).
  187. adancime([H|T],R):-adancime(H,R1),adancime(T,R2),
  188.                     R3 is R1+1,max(R2,R3,R).
  189.                    
  190. adan( L,R,MAX ) :- adancime(L,MAX).
  191.  
  192. tree(t(6, t(4, t(2, nil, nil), t(5, nil, nil)), t(9, t(7, nil, nil), nil))).
  193.  
  194. search_key(Key, t(Key, L, R),t(Rez,NL,R)):- get_pred(L,Rez,NL).
  195. search_key(Key, t(K, L, _),Rez):-Key<K, !, search_key(Key, L, Rez).
  196. search_key(Key, t(_, _, R),Rez):-search_key(Key, R,Rez).
  197.  
  198. get_pred(t(Pred, L, nil), Pred, L):-!.
  199. get_pred(t(Key, L, R), Pred, t(Key, L, NR)):-get_pred(R, Pred, NR).
  200.  
  201.  
  202.  
  203. %encode
  204. max_encode([H1,H1|T],R,C):-!, C1 is C+1, max_encode([H1|T],R,C1).
  205. max_encode([_, H2|T],[C|TR],C):- max_encode([H2|T],TR,1).
  206. max_encode([_],[C],C).
  207. max_encode([],[],_).
  208. max_encode([H1,H2|T],R):- max_encode([H1,H2|T],R1,1), max(R1,R).
  209.  
  210. max_from_list([H|T],R,MAX) :- H>MAX , max_from_list(T,R,H).
  211. max_from_list([_|T],R,MAX) :- max_from_list(T,R,MAX).
  212. max_from_list([],_,_).
  213.  
  214. max_enc(L,R,X) :- max_encode(L,R,1),max_from_list(R,X).
  215.  
  216. %max_enc([a,a,b,b,b,d,a,a,a,a,d],R,X).
  217. %
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement