Prolog Primeri
Prolog Primeri
*/
max2(X,Y,X):-X>=Y,!.
max2(X,Y,Y).
/* N! */
fakt(0,1).
fakt(N,F):-N1 is N-1,fakt(N1,F1),F is N*F1.
/* N!! */
faktd(0,1).
faktd(1,1).
faktd(N,F):-N1 is N-2,faktd(N1,F1),F is N*F1.
/* Apsolutna vrednost. */
abs(X,X):-X>=0,!.
abs(X,Y):-X<0,Y is -X.
/*
Utvrditi da li je zadati broj prost.
Broj je prost ako nije deljiv ni sa jednim brojem od broja 2 do
polovine zadatog broja.
*/
prost(N):-prost(N,2).
prost(N,X):-X>N//2,!.
prost(N,X):-X=<N//2,N mod X=\=0,X1 is X+1,prost(N,X1).
/*
Prikazati sve proste brojeve manje ili jednake zadatom broju. Verzija 1.
*/
prosti(X):-X>=2,prost(X),write(X),tab(2),X1 is X-1,prosti(X1).
prosti(X):-X>=2,not prost(X),X1 is X-1,prosti(X1).
/*
Prikazati sve proste brojeve manje ili jednake zadatom broju. Verzija 2.
*/
prosti(X,X):-X>=2,prost(X).
prosti(X,P):-X>=2,X1 is X-1,prosti(X1,P).
/* Prikazati koliko ima prostih brojeva manjih ili jednakih zadatom broju. */
prostin(X,0):-X<2.
prostin(X,N):-X>=2,prost(X),X1 is X-1,prostin(X1,N1),N is N1+1.
prostin(X,N):-X>=2,not prost(X),X1 is X-1,prostin(X1,N).
/* Fibonacijev niz. */
fib(1,1):-!.
fib(2,1):-!.
fib(N,K):-N>2,N1 is N-1,fib(N1,K1),N2 is N1-1,fib(N2,K2),K is K1+K2.
/* Clan liste. */
clan([X|_],X).
clan([_|Y],X):-clan(Y,X).
/* Duzina liste. */
duzlis([],0).
duzlis([_|R],N):-duzlis(R,M), N is M+1.
/* Zbir elemenata liste. */
zbirellis([],0).
zbirellis([G|R],Z):-zbirellis(R,Z1),Z is Z1+G.
/* Obrtanje liste. */
obrni([],[]).
obrni([G|R],X):-obrni(R,Y),spoj(Y,[G],X).
/*
Ispitati da li svi elementi liste imaju odredjenu osobinu.
Na primer: da li su svi elementi liste pozitivni.
*/
osobina_liste([]).
osobina_liste([G|R]):-osobina(G),osobina_liste(R).
osobina(X):-X>0.
/*
Iz date liste izbaciti prvih N elemenata a od preostalih formirati listu.
U suprotnom, prikazati odgovarajucu poruku.
*/
izbaci_n(L,0,L):-!.
izbaci_n(L,N,_):-duzlis(L,M),M<N,write('Lista je kraca nego sto treba!'),!,fail.
izbaci_n([G|R],N,L):-N>0,M is N-1,izbaci_n(R,M,L).
/*
Iz date liste izbaciti poslednjih N elemenata a od preostalih formirati listu.
U suprotnom, prikazati odgovarajucu poruku.
*/
izbaci_np(L,N,L1):-obrni(L,LL),izbaci_n(LL,N,L2),obrni(L2,L1).
/*
Brise sve pojave zadatog elementa iz liste ali tako da brise samo jednu
pojavu elementa.
*/
brisi([G|R],G,R).
brisi([G|R],X,[G|R1]):-brisi(R,X,R1).
perm2([],[]).
perm2(L,[G|R]):-brisi(L,G,L1),perm2(L1,R).
/* Clan liste. */
clan([X|_],X).
clan([_|Y],X):-clan(Y,X).
/* Generisati varijacije sa ponavljanjem elemenata date liste. */
varp(X,0,[]).
varp(L,N,[G|R]):-N>0,clan(L,G),N1 is N-1,varp(L,N1,R).
/* Sortiranje sa umetanjem. */
stu([],[]).
stu([G|R],S):-stu(R,L),umetni(G,L,S).
/* Bubble sort. */
bubble(L1,L2):-spoj(X,[A,B|R],L1),B<A,!,spoj(X,[B,A|R],L3),bubble(L3,L2).
bubble(L,L).
/* Clan stabla. */
clan(X,s(L,X,D)):-!.
clan(X,s(L,Y,D)):-clan(X,L),!.
clan(X,s(L,Y,D)):-clan(X,D).
/* Provera brisanja. */
bris(L,X,L1):-ublisbs(L,nil,BS),brisi(BS,X,BS1),inorder(BS1,L1).
/*
Generisati listu listova binarnog stabla.
*/
listovi(L,L1):-ublisbs(L,nil,S),nadjilistove(S,L1).
nadjilistove(nil,[]):-!.
nadjilistove(s(nil,K,nil),[K]):-!.
nadjilistove(s(L,K,D),Lis):-nadjilistove(L,Lis1),nadjilistove(D,Lis2),
spoj(Lis1,Lis2,Lis).
/*
Sadrzaj K-tog cvora binarnog stabla pri obilasku levo-koren-desno.
*/
sadrzaj(S,K,X):-inorder(S,L),ktiellis(L,K,X).
ktiellis(L,K,X):-K<1,write('Nemoj da se salis!'),!,fail.
ktiellis(L,K,X):-duzlis(L,N),K>N,write(K),write('>'),write(N),fail,!.
ktiellis(L,K,X):-duzlis(L,N),K=<N,K1 is K-1,izbaciprvihn(L,K1,[X|_]).
provsadrk(L,K,X):-ublisbs(L,nil,BS),sadrzaj(BS,K,X),!.