%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