Listas en Prolog
Una lista en Prolog (como en casi cualquier lenguaje que use listas) se divide
en dos partes:
(1) Cabeza. Es el primer elemento de la lista. Puede ser un ´atomo o una
lista, pero a fin de cuentas es el primer elemento de la lista original.
(2) Cola. Es el resto de los elementos de una lista, es de nuevo una lista.
Ejemplos:
(1) L=[perro, gato, raton, queso]
(a) cabeza= perro
(b) cola=[gato, raton, queso]
(2) L=[[perro, gato], [raton, queso]]
(a) cabeza=[perro, gato]
(b) cola=[[raton, queso]]
(3) L=[perro]
(a) cabeza=perro
(b) cola=[] la lista vac´ıa
(4) L=[]
(a) cabeza= NO
(b) cola=[] la lista vac´ıa
En esta secci´on se ver´a el uso de las listas para determinar la existencia de un
elemento en la lista e incluso el uso de recursividad.
En primer lugar, la existencia de un elemento en la lista se puede verificaci
con una regla como: pertenece(E,L):-L=[E| ]. Que dice que el elemento E
pertenece a la lista L si L se puede hacer teniendo una lista cuya cabeza sea E
y cualquier cola, incluso la lista vac´ıa.
Pero esto solamente nos asegura la pertenencia de la cabeza de la lista, no si
un elemento est´a dentro de ella. Para esto se necesita una segunda cl´ausula
recursiva: pertenece(E,[ |T]):-pertenece(E,T). Es decir “un elemento E
pertenece a una lista compuesta de cualquier cabeza y una cola T, si ese mismo
elemento E es la cabeza del resto de la lista T”.
As´ı se tiene el siguiente programa en Prolog que verifica la pertenencia de un
elemento en una lista:
pertenece(E,L):-L=[E|_].
pertenece(E,[_|T]):-pertenece(E,T).
:-pertenece(E,[a,b,c,d,e].)