Advertisement
Guest User

Mestint nyelvek 3.gyak all

a guest
Sep 26th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.00 KB | None | 0 0
  1. %2.gyak anyaga:
  2. %elso(x,l) : X az első eleme L-nek, L az egy lista, X pedig egy elem
  3. elso(X,L) :- L=[X|_].
  4. %utolso(X,L): X az utolsó eleme L-nek
  5. utolso(X, [X]).
  6. utolso(X,[_,Z|L]) :- utolso(X,[Z|L]).
  7. %nemb(X,L) : X eleme L-nek
  8. memb(X, [X|_]).
  9. memb(X[_|L]) :- memb(X,L).
  10. %ins(X,L,M) : X-et L-be beszúrással kapjuk M-et
  11. ins(X,L,[X|L]).
  12. ins(X,[Y|L1],[Y|M1]) :- ins(X,L1,M1).
  13. %sel(X,L,M): X n példáját elhagyva L-ből kapunk M-et
  14. sel(X,L,M) :- ins(X,M,L).
  15. %rev
  16. rev([],[]).
  17. rev([X],[X]).
  18. rev([X|L],M) :- rev(L,N),append(N,[X],M).
  19.  
  20. revuj(L,M) :- revuj(L,[],M).
  21. revuj([],M,M).
  22. revuj([X|L], A, M) :- revuj(L, [X|A], M).
  23. %Kap egy listát, a fejet átrakja A-ba, és az egészet M-be.
  24. %
  25. %app(L,M,N): L + M konkatenálása N-be
  26. app([],M,M).
  27. app([X|L],M,N) :- app(L,M,K),N=[X|K].
  28.  
  29. lth([],0).
  30. lth([_|L],N) :- lth(L,M), N is M+1.
  31.  
  32. inssort([],[]).
  33. inssort([X|L],M) :- inssort(L,N), insop(X,N,M).
  34.  
  35. insop(X,[],[X]).
  36. insop(X, [Y|N], S) :- X=<Y, S = [X,Y|N].
  37. insop(X, [Y|N], [Y|S]) :- Y<X, insop(X,N,S).
  38.  
  39. %3. gyak anyaga:
  40. %összefűzéses rendezés
  41. %Van egy lista, kettébontjuk, L1 és L2
  42. %Rekurzív lépés:
  43. %   L1 első eleme: X
  44. %   L2 első eleme: Y
  45. %   Ha X =< Y
  46. %       X berak, L1 első eleme: M, L2 első eleme: Y
  47. %   Ha X > Y
  48. %       Y berak, ...
  49. %Bemeneti lista: L
  50. %Kimeneti lista: N
  51. %Bemeneti: SO, SE (listák)
  52. %Kimeneti: N
  53. %! --> több alternatívát ne nézzen
  54. mergesort([], []) :- !.
  55. mergesort([X], [X]) :- !.
  56. mergesort(L,N) :- split(L,O,E), mergesort(O, SO), mergesort(E,SE), merge(SO,SE,N).
  57. merge(SO,SE,N) :- merge(SO,SE,[],N).
  58. merge([X|SO],[Y|SE], A, N) :- X=<Y, merge(SO,[Y|SE],[X|A], N).
  59. merge([X|SO],[Y|SE],A,N) :- X>Y, merge([X|SO], SE, [Y|A], N).
  60. %Az SE-ben van egy olyan nagy elem, ami nagyobb, mint a többi
  61. merge([], SE, A, N) :- reverse(A,B), append(B,SE,N).
  62. merge(SO,[],A,N) :- merge([], SO, A, N).
  63.  
  64. split(L, O, E) :- odd(L, [], [], O, E).
  65. odd([], A, B, A, B).
  66. odd([X|L], A, B, O, E) :- even(L, [X|A], B, O, E).
  67. even([], A, B, A, B).
  68. even([X|L], A, B, O, E) :- odd(L, A, [X|B], O, E).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement