Está en la página 1de 3

Uso de listas en Prolog

Abdiel E. Cceres Gonzlez (recopilador) a a


Instituto Tecnolgico de Monterrey o campus Ciudad de Mxico e

Abstract Este documento es un resumen del uso de listas en Prolog, se pretende que sea una guia rpida y de uso frecuente para los usuarios e interesados en el uso de Prolog. a

Estructura de una lista

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 tomo o una a lista, pero a n 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 vaca (4) L=[] (a) cabeza= NO (b) cola=[] la lista vaca

Manejo del contenido de las listas

En esta seccin se ver el uso de las listas para determinar la existencia de un o a elemento en la lista e incluso el uso de recursividad. En primer lugar, la existencia de un elemento en la lista se puede vericaci 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 dentro de ella. Para esto se necesita una segunda clusula a a 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 verica 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].)

Uso de la pertenencia para denir otras reglas utiles

Consideremos esta pequea base de reglas: n perros(pastor_aleman, [juli, esteban, pancho]). perros(san_bernardo, [master, rigan, mujamad]). perros(french_poodle, [figaro, piojo, ramiro]). Para determinar la raza de determinado perro y ubicarlo como pastor alemn, a san bernardo o french poodle, primero es necesario establecer la raza y despues buscar en la lista de esa raza a ese perro. pastor_aleman(P):-perros(pastor_aleman, L), pertenece(P,L). Adems, podemos saber si un tomo es un perro siempre tiene una raza a a (aunque sea corriente) as que podemos denir una regla para saber si un elemento es uno de los perros que hemos denido: perro(R):-perros(_,L), pertenece(R,L). 2

Con la consulta :-perro(X). podemos determinar todos los perros que hemos denido. Enseguida el programa completo. perros(pastor_aleman, [juli, esteban, pancho]). perros(san_bernardo, [master, rigan, mujamad]). perros(french_poodle, [figaro, piojo, ramiro]). pertenece(E,L):-L=[E|_]. pertenece(E,[_|T]):-pertenece(E,T). pastor_aleman(P):-perros(pastor_aleman, L), pertenece(P,L). raza(R):-perros(_,L), pertenece(R,L).

Unin de listas o

Se quiere unir las listas [a,b,c] y [d,e,f] para obtener la lista [a,b,c,d,e,f]. Una manera de hacerlo es: agregar([],L,L). agregar([X|L1],L2,[X|L3]):-agregar(L1,L2,L3). Con una consulta como: :-agegar([a,b,c],[d,e,f],L), obtendremos la respuesta L = [a, b, c, d, e, f].

4.1

Cmo obtener el nsimo elemento de una lista o e

Esto se puede lograr eliminando recursivamente n elementos de una lista, la variable E controla el nmero de elementos que se han eliminado. Cuando R=1, u entonces X se asigna al ensimo elemento. e enesimo(X,1,[X|_]). enesimo(X,N,[_|L]):-R is N-1, enesimo(X,R,L). As en la consulta :-enesimo(X,3,[a,b,c,d]), se obtiene la respuesta X=c.

References [vgmm99] Introduccin a los lenguajes PROLOG y LISP; Vzquez, Gmez, o a o Matus y M njarez. IPN 1999

También podría gustarte