Las listas son estructuras de datos muy poderosas para almacenar y manipular conjunto de términos.  Se trata de un par ordenado donde cada componente es un término, una lista o el término NIL (que es la lista vacía y se escribe []). La primer componente de la lista se llama cabeza de la lista y la segunda cola. Denotamos a lista de la siguiente manera:

<Lista> := [ <H> | <T> ] ó [].

Donde

<H>:= <término> ó <lista>

<T>:= <término> ó <lista>

Veamos algunos ejemplos:

[ 1 | [ 2 |  [ 3 | [] ] ] ] es la lista cuya primera componente o cabeza es el termino constante 1 y la cola es la lista [ [ 2 |  [ 3 | [] ] ] ].

Por abuso de notación, a la lista del ejemplo la denominamos [ 1, 2, 3 ].

Otros ejemplos:

[ 1, [a, b, [c]], 3, [pepe], [] ] es la lista cuya primera componente o cabeza es el termino constante 1 y la cola es la lista  [[a, b, [c]], 3, [pepe], [] ]

[numero(1), letra(a), [numero(2),letra(b)]] es una lista cuya primera componente o cabeza es el término formado por la estructura o functor numero(1) y la cola es la lista [letra(a), [numero(2),letra(b)]].

¿Cómo es el proceso de unificación cuando se tienen listas? El proceso es básicamente similar a la unificación con términos. Veamos algunos ejemplos:

[X,Y] y [a,b] unifican con {X=a, Y=b}

[X,Y] y [[1,2,3],[4,5]] unifican con {X=[1,2,3], Y=[4,5]}

[X|Y] y [1,2,3] unifican con {X=1, Y=[2,3]}. En este ejemplo, cabe destacar que la lista [1,2,3] es equivalente a la lista [ 1 | [ 2 | [ 3 | [] ] ] ] donde la cabeza es 1, que unifica con X y la cola es la lista [[ 2 | [ 3 | [] ] ] ] ó lo que es lo mismo, la lista [2,3] que unifica con Y.

[X,Y] y [letra(a)|[letra(b)|letra(c)]].  Unifican con {X=letra(a), Y=[letra(b),letra(c)]}

[X|Y] y [] no unifican dado que la primera lista es una lista con al menos un elemento y la lista vacía no tiene elementos.

Tener en cuenta que  [X,Y | Z] unifica con cualquier lista que tenga al menos dos elementos, es decir unifica, por ejemplo con [1,2] con la sustitución:{X=1, Y=2, Z=[] }

También unifica con la lista [1, 2, 3] con la sustitución {X=1, Y=2, Z=[3] }

Dando un ejemplo más realista, podríamos tener una base con las materias que cursa cada alumno, del siguiente modo:

cursa(juan, [matematicas, historia, computacion]).

cursa(ana, [matematicas, arte, historia]).

cursa(pedro, [geologia, logica, geografia]).

cursa(maria, [logica, arte, computacion]).

cursa(jose, [logica, historia, geografia]).

Más aún, podríamos decir que cada posición en la lista de materias, significa algo, como por ejemplo, que la primera posición corresponde a la primera hora, la segunda a la segunda hora y la tercera a la tercera hora, de modo que Juan, por ejemplo, cursa primero matemáticas, luego historia y en la tercera hora computación.