encabezamientos Listas de de materia y listas de autoridades
Practicas prolog2011 listas
-
Upload
leonardobernalzamora -
Category
Education
-
view
1.346 -
download
2
description
Transcript of Practicas prolog2011 listas
Manejo de Listas Manejo de Listas en Prologen Prolog
Inteligencia Artificial
Esp. Leonardo Bernal Zamora
• LISTAS.• Una lista en PROLOG es un conjunto de nombres de objetos,
o átomos, separados por comas y encerrados en paréntesis cuadrados.
• [member1,member2,...,memberN]
• Los miembros de una lista deben ser nombres válidos de objetos, pero todos los miembros deben ser declaraciones de un mismo dominio.
Ejemplo:• ["Maria","Ana","Juan"]• [33,25.51,20,10,7]• [a,b,c,d,e,f,g]
• La lista puede ser vista, como un objeto don dos partes: [Cabeza|Cola]– La cabeza de la lista, conformada por el
primer elemento.– La cola, es la parte restante de la lista.
• En el ejemplo, la cabeza es a, mientras que la cola de la lista es [b,c,d,e,f,g,].
ELEMENTOS DE UNA LISTA• El siguiente código es para saber si un elemento se encuentra dentro de una
lista y/o para sacar a la cabecera de la lista. Elemento (X,R). es verdadero si X es una lista y R es elemento de esa lista.
elemento([X|R],X). %A esto se le llama el caso base.elemento([X|R],Y):-elemento(R,Y).
| ?- elemento(["Mouse","Video","Parlantes","web Cam"],"Mouse").yes| ?- elemento(["Mouse","Video","Parlantes","web Cam"],"Ram").no
ARIDAD DE UNA LISTA
• Aridad es el numero de elementos de una lista.
aridad([ ],0). %Caso basearidad([X|R],N):-aridad(R,Z),N is Z+1.
:?-aridad([a,b,c,d,e],N).N=5.
| ?- elemento([a,e,i,o,u],X).X = a ;X = e ;X = i ;X = o ;X = u ;no
ANÁLISIS DEL EJEMPLO ANTERIOR.Nivel 1.- X=a, R=[b,c,d,e], N=Naridad([ ],0). %Aquí tenemos una lista vacía, así que continua a la siguiente línea.aridad([X|R],N):-aridad(R,Z),N is Z+1.Aquí todo coincide, pues son variables, así que pasa a la primera acción, que es volver a empezar pero sin el primer elemento de la lista y así hasta llegar a la e.Nivel 2.- X=b, R=[c,d,e], N=NNivel 3.- X=c, R=[d,e], N=NNivel 4.- X=d, R=[e], N=NNivel 5.- X=e, R=[ ], N=N
ARIDAD DE UNA LISTA
En este nivel vemos que la lista vacía y la variable N coincidirán con el caso base, así que se dará por terminada la acción aridad(R,Z) por lo que se continuara con la segunda acción del Nivel 5, N is Z+1
Nivel 5.- N=1
Al terminar con esto, terminara con el nivel 4 y continuara con la segundaacción del nivel anterior.
Nivel 4.- N=2Nivel 3.- N=3Nivel 2.- N=4Nivel 1.- N=5
N=5.
ARIDAD DE UNA LISTA
CONCATENAR LISTASConcatenar no es más que unir dos elementos o listas. Lo cual se podría decir que es unir 2 listas, pues una lista puede contener solo un elemento. De esto concluimos que concatenar es unir la lista L1 y L2 en una lista L3.
conc([ ],L2,L2).conc([X|R],L2,[X|Z]):-conc(R,L2,Z).
| ?- conc([a,b,c,d,e],[1,2,3],R).
R = [a,b,c,d,e,1,2,3]
?- conc(['Universidad', 'de', 'Boyaca'],['Inteligencia', 'Artificial'],R).
R = ['Universidad',de,'Boyaca','Inteligencia','Artificial']
Nota: cambiar las comillas sencillas por comillas dobles
INVERSO DE UNA LISTAinverso([ ],[ ]).inverso([X],[X]).inverso([X,Y],[Y,X]).inverso([X|R],E):-inverso(R,Z),conc(Z,[X],E).
| ?- inverso([a,b,c],L).
L = [c,b,a] ;
| ?- inverso(['Universidad', 'de', 'Boyaca','Inteligencia', 'Artificial'],R).
R = ['Artificial','Inteligencia','Boyaca',de,'Universidad'] ;
Si tenemos L=[a,b,c], su inverso es Li=[c,b,a].
duplicar([ ],[ ]).duplicar([C|L1],[C,C|L2]):-duplicar(L1,L2).
DUPLICAR UNA LISTALx=[1,2,3] Ly=[1,1,2,2,3,3]
| ?- duplicar([a,b],R).R = [a,a,b,b]
eliminar EL ÚLTIMO ELEMENTO DE LA LISTAL1=[a,b,c,d] Lq=[a,b,c]
ANÁLISIS DEL EJEMPLO ANTERIOR.Nivel 1.- C=a, P1=[b,c,d], eliminar([b,c,d],X)Nivel 2.- C=b, P1=[c,d], eliminar([c,d],X)Nivel 3.- C=c, P1=[d], eliminar([d],X)De regreso:Nivel 3.- X=[a]Nivel 2.- X=[a,b]Nivel 1.- X=[a,b,c]
ELIMINAR EL ÚLTIMO ELEMENTO DE LA LISTAL1=[a,b,c,d] Lq=[a,b,c]
eliminar([A],[ ]).eliminar([C|P1],[C|P2]):-eliminar(P1,P2).
?-eliminar([2,0,1,2],X).X=[2,0,1]
?-eliminar([a],X).X=[a]
BORRAR UN ELEMENTO CUALQUIERA DE UNA LISTA
borrar (X,Y,Z). es verdadero si X es un elemento de la lista Y, y Z es la lista Y sin el elemento X.
borrar(X,[ ],[ ]).borrar(X,[X|R],L):- borrar(X,R,L).borrar(X,[Y|R],[Y|L]):-X\=Y,borrar(X,R,L).
| ?- borrar(a,[b,d,a,c,f],L).L = [b,d,c,f] ;
\= corresponde a diferente
MÁXIMO DE UNA LISTA DE NÚMEROSmax_lista([X],X).max_lista([X1,X2|L],Y):- X3 is max(X1,X2), max_lista([X3|L],Y).
| ?- max_lista([1,2,50,800,9,89],L).L = 800 ;
Ejercicios propuestos:Ejercicios propuestos:•Sumar los elementos de una lista.Sumar los elementos de una lista.•Ordenar una listaOrdenar una lista•Generar una lista desde N hasta M Generar una lista desde N hasta M
Aplicación de ListasFuente: http://www.cs.us.es/~jalonso/publicaciones/
Ver Fuente http://www.cs.us.es/~jalonso/publicaciones/2006-ej_prog_declarativa.pdf
Link de Interés
• http://fcqi.tij.uabc.mx/docentes/ardiaz/material/manual_lab_prolog.pdf
• Ejercicios de programación declarativa con Prolog - http://www.cs.us.es/~jalonso/ José A. Alonso Jiménez