%ovo je linijski komentar
/*
ovo je viselinijski komentar
*/

% cinjenice
veci(slon,tigar).
veci(tigar,majmun).
veci(tigar,ptica).
veci(majmun,ptica).

/* ovo je u bazi znanja i prolog to razume
?-veci(slon,tigar).
true.

ovo nije u bazi znanja, pa on bez pravila zakljucivanja
to ne moze da zakljuci
?- veci(slon,konj).
false.
*/

/*
izlistaj sve zivotinje koje su vece od tigra?
?- veci(X,tigar).
X = slon.
*/

% pravilo zakljucivanja
je_veci(X,Y):-veci(X,Y). 
je_veci(X,Y):-veci(X,Z),je_veci(Z,Y).

bojenje(Srb,Madj,Rum,Bug,Mak,Alb,Cg,RS,Hrv):-
sused(Srb,Madj),
sused(Srb,Rum),
sused(Srb,Bug),
sused(Srb,Mak),
sused(Srb,Alb),
sused(Srb,Cg),
sused(Srb,RS),
sused(Srb,Hrv),
sused(Madj,Rum),
sused(Madj,Hrv),
sused(Rum,Bug),
sused(Bug,Mak),
sused(Mak,Alb),
sused(Alb,Cg),
sused(Cg,Hrv),
sused(Cg,RS),
sused(RS,Hrv).

% susedi su boje t.d. su razlicite
sused(X,Y):-boja(X),boja(Y),X\=Y.

boja(zuta).
boja(crvena).
boja(plava).
boja(zelena).

%liste 
glava1([H],H).

/* ako pozovemo predikat

?- glava1([1,2,3],X).
false

Zasto? Zato sto ne uspeva unifikacija, glava1 ocekuje
listu koja ima tacno 1 element.

*/
% ovo je ok verzija (nece raditi samo kad je lista prazna,
% ali taj slucaj mozemo zanemariti)
glava([H|T],H).

%dekompovanje liste:

% [1,2,3,4,5,6,7]
% [H|T] -> H=1, T=[2,3,4,5,6,7]
% [H1,H2|T] -> H1=1, H2=2, T=[3,4,5,6,7]

poslednji([H],H).
poslednji([H|T],X):-poslednji(T,X).

nti([H|T],1,H).
nti([H|T],N,X):-M is N-1, nti(T,M,X).

duzina([],0).
duzina([H|T],M):-duzina(T,N),M is N+1.

obrni([],[]).
% append spaja dve liste zato smo oko H stavili []
obrni([H|T],R1):-obrni(T,R),append(R,[H],R1).

palindrom(L):-obrni(L,R),L=R.
palindrom1(L):-obrni(L,L). %moze i ovako











