% ovo je komentar /* ovo takodje */ % cinjenice veci(slon,vuk). veci(vuk,zec). veci(slon,zebra). veci(zebra,vuk). veci(slon,zec). /* ako u bazi znanja imamo samo cinjenice, ne postoji nikakva moc zakljucivanja i prolog moze da nam prosto vrati direktno cinjenicno stanje 1 ?- veci(slon,zec). true. 2 ?- veci(slon,zec). true. 3 ?- veci(zebra,zec). false. nigde eksplicitno nije navedeno da je zebra veca od zeca upiti sa promenljivama 4 ?- veci(slon,X). X = vuk ; X = zebra ; X = zec. 5 ?- veci(Y,X). Y = slon, X = vuk ; Y = vuk, X = zec ; Y = slon, X = zebra ; Y = zebra, X = vuk ; Y = slon, X = zec. */ /* pravilo zakljucivanja :- zamenjuje implikaciju sa desna na levo , (zarez) je logicko "i" */ je_veci1(X,Y):-veci(X,Z),veci(Z,Y). /* 6 ?- je_veci1(X,Y). X = slon, Y = zec ; X = slon, Y = vuk ; X = zebra, Y = zec ; false. */ je_veci(X,Y):-veci(X,Y). je_veci(X,Y):-veci(X,Z),je_veci(Z,Y). /* 7 ?- | je_veci(slon,X). X = vuk ; X = zebra ; X = zec ; X = zec ; X = vuk ; X = zec ; false. */ bojenje(Srb,Mak,Cg,Madj,Bug,BiH,Hrv,Rum):- sused(Srb,Mak), sused(Srb,Cg), sused(Srb,Madj), sused(Srb,Bug), sused(Srb,BiH), sused(Srb,Hrv), sused(Srb,Rum), sused(Cg,Hrv), sused(Cg,BiH), sused(Madj,Hrv), sused(Madj,Rum), sused(Bug,Rum), sused(Hrv,BiH), sused(Mak,Bug). sused(X,Y):-boja(X),boja(Y),X\=Y. boja(zuta). boja(crvena). boja(zelena). boja(plava). % lista se predstavlja u obliku [1,2,3,4] % dekomponuje se kao sto smo i navikli u haskell-u % na glavu i rep [H|T] ili [H1,H2|T] ili [H] poslednji([H],H). poslednji([H|T],R):-poslednji(T,R). /* 11 ?- poslednji([1,2,3,4,5],X). X = 5 ; false. */ nti([H|T],1,H). nti([],K,H):-K>0,fail. nti([H|T],K,R):-K1 is K-1, nti(T,K1,R). duzina([],0). duzina([H|T],R):-duzina(T,R1),R is R1+1. % spajanje dve liste append([1,2,3],[4,5],X) % pravi X = [1,2,3,4,5] obrni([],[]). obrni([H|T],O):-obrni(T,OT), append(OT,[H], O). palindrom(L):-obrni(L,OL),L==OL. poravnaj([],[]). % ovo je pravilo koje se primenjuje % u slucaju da je glava lista, onda treba % eliminisati rekurzivno zagrade i u glavi % i u repu i nadovezati ta dva resenja poravnaj([H|T],R):-is_list(H), poravnaj(H,HP),poravnaj(T,TP),append(HP,TP,R). % ovde je glava obican element, pa ne treba da se % poziva eliminacija zagrada u glavi % tako da samo nadovezujemo glavu na ocisceni rep poravnaj([H|T],[H|TP]):-not(is_list(H)),poravnaj(T,TP).