Professional Documents
Culture Documents
__________________________________________________
FUNDAMENTOS DE INTELIGENCIA ARTIFICIAL
SISTEMAS DE PRODUCCIN
LISTAS
Las listas son una herramienta importante en la matemtica moderna y en la
computacin simblica. Las listas son una estructura esencial en el leguaje
PROLOG. Una lista es una sucesin de elementos individuales que pueden estar
relacionados mutuamente en alguna forma. Ejemplos de lista son:
Lista
Letras del alfabeto
Grandes felinos
Constantes enteros y variables
Elementos de la lista
a, b, c, d, e
leon, tigre, puma, lince
f, r, 3, X, y, z
CLASE_8_LISTAS.docx
Cabeza= Juan
Cola= lista vaca
Lgicamente, la lista vaca es algo parecido a los conceptos ms familiares de cero,
conjunto nulo y vacio.
Este es un concepto til y necesario para la utilizacin de las listas de los
programas Prolog.
A partir de los elementos anteriores es posible deducir que una lista sin elementos
no presenta problemas lgicos y que por ello es posible designarla simplemente
como la lista vaca.
Existen dos smbolos especiales que se utilizan:
1. El corchete abierto/cerrado.
Por ejemplo:
[a, b, c, d]
[len, tigre, lince, puma]
[X]
La lista vaca se representa por [].
2. El separador. Su smbolo es | y se usa para permitir que una lista se
represente como una cabeza y una cola. El elemento a la izquierda del
separador es la cabeza de la lista y el que est a la derecha, es la cola:
[H | T]
Para mostrar cmo puede accederse a las listas y sus contenidos en un programa
Prolog, la mejor forma es simular una sesin en una terminal.
Aqu se impondr que la base de conocimiento consiste exclusivamente de una sola
clausula en la cual el predicado letras considera, como nico argumento,
la lista [a, b, c, d]. Es posible representar la afirmacin de esta manera:
Letras ([a, b, c, d]).
CLASE_8_LISTAS.docx
letras (X).
X = [a, b, c, d]
?-
letras ([HT]).
H=a
T = [b, c, d]
?-
X=a
Y=b
T = [c, d]
?-
letras ([H_]).
H=a
?-
letras ([_,HT]).
H=b
T = [c, d]
(fin de la sesin)
CLASE_8_LISTAS.docx
CLASE_8_LISTAS.docx
La lista vaca no unifica con la sintaxis de la lista estndar, ya que no tiene cabeza.
? - [H | T] = [].
no
CLASE_8_LISTAS.docx
EJERCICIO
Una base del conocimiento contiene las siguientes clausulas:
CLAUSULAS
peces([tiburon,lucio,salmon,bacalao]).
pajaros([halcon,paloma,gorrion,canario]).
PREGUNTAS
pajaros([_|T]).
pajaros([H,H2|T]).
pajaros(Pajaros).
peces([tiburon,X,salomon,Y]).
pajaros(X,Y,Z).
RESULTADOS:
peces([H,T]).
no
?- peces([H|T]).
H = tiburon
T = [lucio, salmon, bacalao]
yes
?- pajaros([_|T]).
T = [paloma, gorrion, canario]
pajaros([H,H2|T]).
H = halcon
H2 = paloma
T = [gorrion, canario]
pajaros(Pajaros).
Pajaros = [halcon, paloma, gorrion, canario]
yes
?- peces([tiburon,X,salomon,Y]).
no
?- peces([tiburon, X,salomon, Y]).
no
?- pajaros(X,Y,Z).
no
?CLASE_8_LISTAS.docx
L=3
?- longitud([a,b,c],4).
* Bsqueda de un elemento
% Si queremos determinar si un elemento pertenece a una lista.
% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si se encuentra en la cola de la lista.
pertenece(X,[X|_]) :- !.
pertenece(X,[_|R]):- pertenece(X,R).
?- pertenece(b,[a,b,c]).
Yes
?- pertenece(b,[a,[b,c]]).
No
?- pertenece([b,c],[a,[b,c]]).
Yes
CLASE_8_LISTAS.docx
* Concatenar listas
% Si queremos concatenar dos listas lista.
% Concatenar una lista vacia con L es L.
% Concatenar X|L1 con L2 es poner el primer
% elemento de la primera lista (X) ms la
% concatenacin del resto de la lista (L1) con L2
concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).
?- concatenar([1,2],[3,4],R).
R = [1, 2, 3, 4].
* Comprobar si una lista es la inversa de otra
% Si queremos calcular la inversa de una lista.
% La inversa de una lista vaca es una lista vaca.
% La inversa de H|T es la inversa de T concatenada con H.
inversa([],[]).
inversa([H|T],L):- inversa(T,R), concatenar(R,[H],L).
?- inversa([a,b,c,d],[d,c,b,a]).
Yes
% Utilizando un parmetro acumulador.
inver(L1,L2):-inver(L1,L2,[]).
inver([],L,L).
inver([H|T],L,S):-inver(T,L,[H|S]).
?- inver([a,b,c,d],[d,c,b,a]).
Yes
10
BIBLIOGRAFA.
INTELIGENCIA ARTIFICIAL, ELAINE RICH, MC GRAW HILL, 1991.
PROLOG. Programacin y Aplicaciones, D. BURNHAM, LIMUSA
CLASE_8_LISTAS.docx
11