Список - упорядоченная последовательность элементов, имеющая произвольную длину. В ПрологЕ элементы списка не обязаны принадлежать одному типу и могут быть в свою очередь списками. Список в Прологе - это либо пустой список, обозначаемый [], либо структура с функтором "."(точка) и двумя компонентами: головой и хвостом списка. Признаком конца списка служит хвост, являющийся пустым списком [].
Пример 1
Примеры списков.
               [] - пустой список
          .(a,[]) - список из одного элемента a
.(a,.(b,.(c,[]))) - список из трх элементов a,  b, c
В некоторых реализациях Пролога функтор "." определён как инфиксный оператор, тогда третий пример будет иметь вид a.(b.(c.[])).
Однако в любом случае использование "." оказывается неудобным, поэтому в Прологе предусмотрена привычная форма записи списков: [], [a], [a,b,c].
Списки, как и любые другие структуры, могут содержать переменные, например, допустим такой список [X,a,[b,X,Y],Z].
Работа со списками основана на расщеплении их на голову и хвост. Голова - это первый элемент списка, хвост - список из остальных элементов.
Пример 2
Расщепление списков.
Таблица 1    
СписокГоловаХвост
[a, b, c]a[b, c]
[[a, b], c][a, b][c]
[a]a[]
[]НетНет

Пустой список [] не имеет ни головы, ни хвоста.
В Прологе используется специальная форма представления списка с головой H и хвостом T - [H|T].
Пример 3
Сопоставления списков.
?- [X,Y,Z]=[a,b,c].           X = a, Y = b, Z = c
?- [cat]=[X|Y].               X = cat, Y = []
?- [[a,Y]|Z]=[[X,b],[c,d]].   X = a, Y = b, Z = [[c,d]]
Примечание 1
Существует ещё одна область применения списков - представление строк литер (символов): строка, заключённая в двойные кавычки (") эквивалентна списку десятичных значений ASCII.
Для работы со списками в Прологе используется рекурсия. Рассмотрим пример, в котором необходимо определить правила проверки принадлежности элемента списку. Для этого дадим рекурсивное определение принадлежности - некоторый элемент принадлежит списку, если а) он является первым элементом списка (головой списка) или б) принадлежит хвосту списка.
member(X, [Y|Z]):- X=Y.     или
member(X, [Y|_]):- X=Y.     иди
member(X, [X|_]).
member(X, [_|Y]):- member(X,Y).
Для правильного применения рекурсии (а это очень мощное средство) необходимо обращать внимание на два момента.
Рассмотрим, как работают наши правила на следующих запросах: member(a,[a,b,c,d,e]) и member(d,[a,b,c,d,e]).
При получении запроса в виде
?-member(a,[a,b,c,d,e]).
Пролог устанавливает маркер на первое правило для member и начинает попарное сопоставление компонентов предиката-запроса и заголовка этого правила. При сопоставлении первых компонентов происходит конкретизация переменной X из заголовка значением a из запроса, при сопоставлении вторых - удачное сравнение двух атомов a (одного - из запроса, другого - из заголовка).
При получении запроса в виде
?-member(d,[a,b,c,d,e]).
Пролог закончит неудачей попытку использовать первое правило для member и установит маркер первого уровня на второе правило. Использование этого правила порождает подцель в виде member(d,[b,c,d,e]). Для реализации этой подцели Пролог вынужден опять использовать второе правило, установив на него маркер второго уровня, при этом возникает очередная подцель member(d,[c,d,e]). На третьем уровне рекурсии Пролог вновь использует второе правило, что инициирует подцель member(d,[d,e]), которая удовлетворяется на четвертом уровне рекурсии благодаря первому правилу для member.