%lista je rekurzivna dvoclana struktura ciji funktor % ("naziv") je '.' %prvi element strukture je glava liste (njen prvi clan) %dok je drugi element strukture 'rep' liste (lista koja %se sastoji od ostalih elemenata liste-roditelja) %specijalni slucaj je prazna lista (lista s 0 elemenata) %i ona se oznacava s [] %postoji i alternativni zapis liste tako da su %objekti .(Glava, Rep) i [Glava|Rep] ekvivalentni %lista se moze krace zapisati i tako da joj se %eksplicite pobroje elementi unutar uglatih zagrada; %tako je [X,Y,Z] ekvivalentno s .(X, .(Y, .(Z,[]))) %X je element liste ako je X glava te liste... clan(X,.(X,_)). %ili ako je element repa clan(X,.(_,Rep)):- clan(X,Rep). %lista iz 3. argumenta se dobiva povezivanjem %listi iz prva dva argumenta povezi([],L,L). povezi([Glava|Rep1],Lista2,[Glava|Rep3]):- povezi(Rep1,Lista2,Rep3). dodaj(Element,Lista,[Element|Lista]). %lista iz treceg argumenta odgovara listi iz drugog %argumenta iz koje je izbrisan element iz 1. argumenta obrisi(Element, [Element|Rep], Rep). obrisi(Element, [Element1|Rep], [Element1|Rep1]):- obrisi(Element,Rep,Rep1). umetni(Element,Lista,Novalista):- obrisi(Element,Novalista,Lista). %prvi argument je podlista drugog argumenta podlista(Podlista,Lista):- povezi(Lista1,Lista2,Lista), povezi(Podlista,Lista3,Lista2). %prvi argument je permutacija drugog argumenta permutacija([],[]). permutacija([Glava|Rep],Permutacija):- permutacija(Rep,PermutiraniRep), umetni(Glava,PermutiraniRep,Permutacija).