Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2019
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.52 KB | None | 0 0
  1. %% index nejvetsiho prvku linearniho seznamu
  2.     maximum([], false).
  3.     maximum([P], P).
  4.     maximum([H1,H2|T], P) :- H1 >= H2, maximum([H1|T], P).
  5.     maximum([H1,H2|T], P) :- H1 < H2, maximum([H2|T], P).
  6.  
  7.     indexof([H|_], H, 0).
  8.     indexof([_|T], X, I) :- indexof(T, X, J), I is J + 1.
  9.     index_max_cisla([H|T], I) :- maximum([H|T], M), indexof([H|T], M, I).
  10.  
  11. %%převést linární seznam na množinu
  12.  
  13.     je_clen(X, [X|_]) :- !.
  14.     je_clen(X, [_|T]) :- je_clen(X, T).
  15.  
  16.     seznam_do_mnoziny([], []).
  17.     seznam_do_mnoziny([H|T], Y) :- je_clen(H, T), seznam_do_mnoziny(T, Y).
  18.     seznam_do_mnoziny([H|T], [H|Y]) :- seznam_do_mnoziny(T, Y).
  19.  
  20. %% AtomicMax nevim jestli může být takto...
  21.     pocetAtom([], 0).
  22.     pocetAtom([X|XS], S) :- atomic(X), pocetAtom(XS, SS), S is SS + 1;
  23.                   pocetAtom(XS, S1), pocetAtom(XS, S2), S is S1 + S2.
  24.  
  25. %% největší dva prvky v seznamu sečíst s tím že seznam má minimálně dva prvky
  26.  
  27.     dva_nej([X1,X2], P) :- P is X1 + X2, !.
  28.     dva_nej([H1,H2,H3|T], P) :- H1 =< H2, H1 =< H3, dva_nej([H2,H3|T], P).
  29.     dva_nej([H1,H2,H3|T], P) :- H2 =< H1, H2 =< H3, dva_nej([H1,H3|T], P).
  30.     dva_nej([H1,H2,H3|T], P) :- H3 =< H1, H3 =< H2, dva_nej([H1,H2|T], P).
  31.  
  32. %% Sečíst poslední a první v seznamu
  33.     last([X], X).
  34.     last([_|T], X) :- last(T, X).
  35.  
  36.     sumTwo([H|T], S) :- last([H|T], L), S is L + H, !.
  37.  
  38. %% sjednoceni mnoziny
  39.     sjednoceni2([], L, L).
  40.     sjednoceni2([H|T], L, X) :- je_clen(H, L), sjednoceni2(T, L, X), !.
  41.     sjednoceni2([H|T], L, [H|X]) :- sjednoceni2(T, L, X).
  42.  
  43. %% sjednocení a průnik množiny
  44.  
  45.     prunik2([], _, []).
  46.     prunik2([H|L1], L2, [H|XTAIL]) :- je_clen(H, L2), prunik2(L1, L2, XTAIL).
  47.     prunik2([_|L1], L2, X) :- prunik2(L1, L2, X), !.
  48.  
  49.     vlozZ(P, S, S) :- je_clen(P, S), !.
  50.     vlozZ(P, S, [P|S]).
  51.    
  52.     sjednoceni2([], L, L).
  53.     sjednoceni2([H|T], L, M) :- sjednoceni2(T, L, M1), vlozZ(H, M1, M).
  54.     prunik_se_sjednocenyma(I, J, L, M) :- sjednoceni2(I, J, K), prunik2(K, L, M).
  55.  
  56. %% sečíst největší a nejmenší v seznamu
  57.  
  58.     maximum([], false).
  59.     maximum([P], P).
  60.     maximum([H1,H2|T], P) :- H1 >= H2, maximum([H1|T], P).
  61.     maximum([H1,H2|T], P) :- H1 < H2, maximum([H2|T], P).
  62.  
  63.     minimum([], false).
  64.     minimum([P], P).
  65.     minimum([H1,H2|T], P) :- H1 =< H2, minimum([H1|T], P).
  66.     minimum([H1,H2|T], P) :- H1 > H2, minimum([H2|T], P).
  67.  
  68.     soucetMinMax([], 0).
  69.     soucetMinMax(S, MinMax) :-
  70.     minimum(S, Min),
  71.     maximum(S, Max),
  72.     MinMax is Min + Max.
  73.  
  74. %% Smazat posledni 2 prvky v seznamu
  75.     removelast([_,_], []).
  76.     removelast([_], []).
  77.     removelast([], []).
  78.     removelast([H|T1], [H|T2]) :- removelast(T1, T2).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement