You are on page 1of 3

/* N!

*/
fakt(0,1).
fakt(N,F):-N1 is N-1,fakt(N1,F1),F is N*F1.
/* Spajanje dve liste. */
spoj([],L,L).
spoj([G|R],L,[G|X]):-spoj(R,L,X).
/* veci od dva broja. */
max2(X,Y,X):-X>=Y,!.
max2(X,Y,Y).

grana(a,b).
grana(a,d).
grana(c,b).
grana(c,e).
grana(d,c).
grana(e,b).

put(C1,C2):-grana(C1,C2).
put(C1,C2):-grana(C1,C3),put(C3,C2).

/*
Potrebno je napraviti spisak cvorova kroz koje je napravljen jedan prolaz.
Cvorove kroz koje je napravljen prolaz izdvojicemo u posebnu listu i
prilikom odredjivanja novog puta odbacivati one cvorove koji su se
vec pojavljivali. Na taj nacin obezbedjujemo da se pojavljuju samo
razliciti putevi.
*/
put1(C1,C2,L).
put1(C1,C2,L):-grana(C1,X), not(pripada(X,L)), put1(X,C2,[X|L]).

pripada(X,[X|_]):-!.
pripada(X,[_|R]):-pripada(X,R).
/*
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)
/* Clan liste. */
clan([X|_],X).
clan([_|Y],X):-clan(Y,X)..
/* 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.

/* Obrtanje liste. */
obrni([],[]).
obrni([G|R],X):-obrni(R,Y),spoj(Y,[G],X).
/* Spajanje dve liste. */
spoj([],X,X).
spoj([G|R],L,[G|R1]):-spoj(R,L,R1).

/* Presek 2 skupa. */
presek([],X,[]).
presek([G|R],X,[G|P]):-clan(X,G),presek(R,X,P).
presek([G|R],X,P):-not(clan(X,G)),presek(R,X,P).
/* Vraca broj elemenata liste. */
brojell([],0):-!.
brojell([G|R],N):-brojell(R,N1),N is N1+1.
/* Vraca broj elemenata liste. */
brojell([],0):-!.
brojell([G|R],N):-brojell(R,N1),N is N1+1.
2. Napisati program u Prologu kojim se brise 2. element liste.
brisi2(L,L1).
?-brisi2([1,2,3,4],X).
X=[1,3,4]
/* Brise 2. element liste. */
brisi2([],[]):-!.
brisi2([X],[X]):-!.
brisi2([G1,G2|R],X):-spoj2liste([G1],R,X).
/* Vraca broj elemenata liste. */
brojell([],0):-!.
brojell([G|R],N):-brojell(R,N1),N is N1+1.
/* Uzima N elemenata iz liste L. */
preseci(0,L,[]):-!.
preseci(N,[],[]):-!.
preseci(N,[G|R],[G|R1]):-N1 is N-1,preseci(N1,R,R1).
Definisati predikat kojim se odredjuje suma pozitivnih i suma negativnih
elemenata date liste celih brojeva.
*/
sumapn([],0,0).
sumapn([G|R],P,N):-G>=0,sumapn(R,P1,N),P is P1+G.
sumapn([G|R],P,N):-G=<0,sumapn(R,P,N1),N is N1+G.

/*

*/
parni([],[]).
parni([G|R],L):-G mod 2=:=0,parni(R,L1),spoj2liste([G],L1,L).
parni([G|R],L):-G mod 2=\=0,parni(R,L).

/*
/* DODAVANJE JEDNE LISTE NA DRUGU */
dodaj([],X,X).
dodaj([G|R],L,[G|R1]):-dodaj(R,L,R1).
zam(L,L1).
*/

/* DODAVANJE JEDNE LISTE NA DRUGU */


dodaj([],X,X).
dodaj([G|R],L,[G|R1]):-dodaj(R,L,R1).

/* OBRTANJE LISTE */
obrni([],[]).
obrni([G|R],X):-obrni(R,Y),dodaj(Y,[G],X).

/* DODAVANJE ELEMENTA NA POCETAK LISTE */


dodelpoc(X,[],[X]).
dodelpoc(X,[G|R],[X|R1]):-dodelpoc(G,R,R1).

/* DODAVANJE ELEMENTA NA KRAJ LISTE */


dodelkraj(X,[],[X]).
dodelkraj(X,[G|R],[G|R1]):-dodaj(R,[X],R1).

/* ZAMENA MESTA PRVOM I PRETPOSLEDNJEM ELEMENTU */


zam([],[]):-!.
zam([X],[X]):-!.
zam([X,Y],[X,Y]):-!.
zam([G|R],L):-obrni(R,[G1,G2|R1]),obrni(R1,R2),dodelpoc(G2,R2,R3),
dodelkraj(G,R3,R4),dodelkraj(G1,R4,L).
/* Broj cifara celog broja. */
brcif(X,1):-X<10,!.
brcif(X,Y):-X1 is X//10,brcif(X1,Y1),Y is Y1+1.

/* Zbir cifara celog broja. */


zcif(X,X):-X<10,!.
zcif(X,Y):-X1 is X//10,C is X mod 10,zcif(X1,Y1),Y is Y1+C.

/* N-ti stepen broja X. */


stepen(X,0,1):-!.
stepen(X,N,Y):-N>0,N1 is N-1,stepen(X,N1,Y1),Y is X*Y1.

/* Najveci zajednicki delilac. Euklidov algoritam. */


nzd(X,0,X):-!.
nzd(X,Y,N):-Y>0,Z is X mod Y,nzd(Y,Z,N).

/* Najmanji zajednicki sadrzalac. */


nzs(X,Y,N):-nzd(X,Y,Z),N is X*Y//Z.

/* 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.

You might also like