Professional Documents
Culture Documents
Za Test
Za Test
*/
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).
*/
/* OBRTANJE LISTE */
obrni([],[]).
obrni([G|R],X):-obrni(R,Y),dodaj(Y,[G],X).
/* 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.