Lista je struktura koja je ili prazna ili se sastoji od glave i repa.
Prazna lista opisuje se na sledeći način: []
Glava i rep se u listi odvajaju simbolom | (pipe, na tastaturi veliko ž), u ovakvom zapisu: [G|[]]
U nastavku je dato nekoliko predikata kojim se opisuju osnovne operacije sa listama. Vrlo često se lista prikazuje kao [a, b, 1, 2, c, d], gde je a glava liste, a lista [b, 1, 2, c, d] je rep liste.
a) Predikat kojim se proverava da li je neka struktura lista
lista([]).
lista([G|R]):-lista(R).
b) Predikat kojim se proverava da li se neki element nalazi u listi
element(X, [X|_]).
element(X, [Y|R]):-element(X, R).
c) Spajanje dve liste
pripoji([], X, X).
pripoji([X|R], Y, [X|Z]):-pripoji(R, Y, Z).
d) Obrtanje liste
obrni([], []).
obrni([X|Xr], Y):-obrni(Xr, Yr), pripoji(Yr, [X], Y).
obrni1(L, OL):-obrni(L, [], OL).
obrni([], OL, OL).
obrni([G|R], S, OL):-obrni(R, [G|S], OL).
е) Brisanje elemenata iz liste. (Prvog u listi.)
brisi(X, [X|R], R).
brisi(X, [Y|R], [Y|R1]):-brisi(X, R, R1).
f) Dodavanje elementa u listu
ubaci(X, L, VL):-brisi(X, VL, L).
g) Permutacija elemenata liste i sortiranje
permutacija([], []).
permutacija([X|L], P):-permutacija(L, L1), ubaci(X, L1, P).
uredjena([X]).
redjena([X|[Y|R]]):-X=<Y, uredjena([Y|R]).
sortiraj(L, SL):-permutacija(L, SL), uredjena(SL).
h) Podlista
podlista(S, L):-pripoji(L1, S, L2), pripoji(L2, L3, L).
i) Broj elemenata i suma elemenata liste
broj_elemenata([], 0).
broj_elemenata([G|R], N):- broj_elemenata(R, N1), N is N1 + 1.
suma_elemenata([], 0).
suma_elemenata([G|R], N):- suma_elemenata(R, N1), N is N1 + G.
j) Quick sort algoritam za sortiranje brojeva
qsort([], []).
qsort([G|R], T):-manji(G, R, LM),
veci(G, R, LV),
qsort(LM, SLM),
qsort(LV, SLV),
pripoji(SLM, [G|SLV], T).
manji(G, [], []).
manji(X, [G|R], [G|R1]):-G=<X, manji(X, R, R1).
manji(X, [G|R], R1):-G>X, manji(X, R, R1).
veci(G, [], []).
veci(X, [G|R], [G|R1]):-G>=X, veci(X, R, R1).
veci(X, [G|R], R1):-G<X, veci(X, R, R1).