O lista poate fi vazuta ca un obiect recursiv cu doua componente: capul listei si coada (restul) listei, care la randul ei este o lista. Prologul are un functor special pentru construirea listelor si anume simbolul '.'. Astfel, o lista formata din elementele 1, 2 si 3 poate fi scrisa sub forma:
.(1, .(2, .(3, [])))
Din exemplul de mai sus se poate observa ca lista vida se noteaza prin atomul []. Exista si o notatie mai simpla a listelor, cu ajutorul parantezelor drepte. In aceasta notatie o lista are forma:
[E1, E2, ..., En | Tail]
Elementele listei sunt despartite prin virgula, si poate aparea optional
la sfirsit simbolul '|' urmat de specificarea cozii listei. Poate
fi cel mult un singur '|' in
specificarea listei, nici o virgula dupa acest simbol nefiind permisa
la acest nivel.
Exemple de liste:
[a] == .(a,
[])
[a,b] == .(a, .(b, []))
[X,a|T] == .(X, .(a, T))
[a|[b,c]] == .(a, .(b, .(c, [])))
Atunci cand un predicat primeste ca argument o lista, de obicei el opereaza asupra capului listei, restul listei rezolvindu-se printr-un apel recursiv. De exemplu, predicatul care testeaza apartenenta unui element la o lista poate fi scris sub forma:
apartine(X, [X|_]).
apartine(X, [_|T]) :- apartine(X,T).
Probleme: