Advertisement
Guest User

Untitled

a guest
May 29th, 2019
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.48 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í dva prvky 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.  
  39. %% sjednoceni mnoziny
  40.     sjednoceni2([], L, L).
  41.     sjednoceni2([H|T], L, X) :- je_clen(H, L), sjednoceni2(T, L, X), !.
  42.     sjednoceni2([H|T], L, [H|X]) :- sjednoceni2(T, L, X).
  43.  
  44. %% sjednocení a průnik množiny
  45.  
  46.     prunik2([], _, []).
  47.     prunik2([H|L1], L2, [H|XTAIL]) :- je_clen(H, L2), prunik2(L1, L2, XTAIL).
  48.     prunik2([_|L1], L2, X) :- prunik2(L1, L2, X), !.
  49.  
  50.     vlozZ(P, S, S) :- je_clen(P, S), !.
  51.     vlozZ(P, S, [P|S]).
  52.    
  53.     sjednoceni2([], L, L).
  54.     sjednoceni2([H|T], L, M) :- sjednoceni2(T, L, M1), vlozZ(H, M1, M).
  55.     prunik_se_sjednocenyma(I, J, L, M) :- sjednoceni2(I, J, K), prunik2(K, L, M).
  56.  
  57. %% sečíst největší a nejmenší v seznamu
  58.  
  59.     maximum([], false).
  60.     maximum([P], P).
  61.     maximum([H1,H2|T], P) :- H1 >= H2, maximum([H1|T], P).
  62.     maximum([H1,H2|T], P) :- H1 < H2, maximum([H2|T], P).
  63.  
  64.     minimum([], false).
  65.     minimum([P], P).
  66.     minimum([H1,H2|T], P) :- H1 =< H2, minimum([H1|T], P).
  67.     minimum([H1,H2|T], P) :- H1 > H2, minimum([H2|T], P).
  68.  
  69.     soucetMinMax([], 0).
  70.     soucetMinMax(S, MinMax) :-
  71.     minimum(S, Min),
  72.     maximum(S, Max),
  73.     MinMax is Min + Max.
  74.  
  75. %% Smazat posledni 2 prvky v seznamu
  76.     remove2last([_,_],[]).
  77.     remove2last([H|T1],[H|T2]) :- remove2last(T1,T2).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement