información estructurada. listas (2010/2011) - practica1.pdf · objetos estructurados...

33
Información estructurada. Listas (2010/2011) Luis Valencia Cabrera [email protected] ( http://www.cs.us.es/~lvalencia) Ciencias de la Computacion e IA ( http://www.cs.us.es/) Universidad de Sevilla

Upload: others

Post on 07-Jun-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Información

estructurada.

Listas

(2010/2011)

Luis Valencia Cabrera

[email protected]

(http://www.cs.us.es/~lvalencia)

Ciencias de la Computacion e IA

(http://www.cs.us.es/)

Universidad de Sevilla

Page 2: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Objetos estructurados

Representación de listas

Recuperación de la información

Ejemplo: simulación de un autómata

Ejemplo: problema del mono

Índice

Page 3: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Objetos estructurados (I) La siguiente base de conocimiento

representa un diccionario de seis plabras en inglés.

word(abalone,a,b,a,l,o,n,e).

word(abandon,a,b,a,n,d,o,n). word(enhance,e,n,h,a,n,c,e).

word(anagram,a,n,a,g,r,a,m).

word(connect,c,o,n,n,e,c,t).

word(elegant,e,l,e,g,a,n,t).

Page 4: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Objetos estructurados (II) Definir un predicado:

crucigrama(H1,H2,H3,V1,V2,V3)

que indique la solución al crucigrama.

crucigrama(H1,H2,H3,V1,V2,V3):-

word(H1,_,X11,_,X12,_,X13,_),

word(H2,_,X21,_,X22,_,X23,_),

word(H3,_,X31,_,X32,_,X33,_),

word(V1,_,X11,_,X21,_,X31,_),

word(V2,_,X12,_,X22,_,X32,_),

word(V3,_,X13,_,X23,_,X33,_).

Page 5: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Objetos estructurados (III) Segmentos verticales y horizontales

Representación: punto(X,Y)

seg(P1,P2)

horizontal(S) se verifica si el segmento S es horizontal vertical(S) se verifica si el segmento S es vertical.

Por ejemplo,

vertical(seg(punto(1,2),punto(1,3))) => Sí

vertical(seg(punto(1,2),punto(4,2))) => No

horizontal(seg(punto(1,2),punto(1,3))) => No

horizontal(seg(punto(1,2),punto(4,2))) => Sí

Programa: ver_hor.pl horizontal(seg(punto(X,Y),punto(X1,Y))).

vertical(seg(punto(X,Y),punto(X,Y1))).

Page 6: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Objetos estructurados (IV) ¿Es vertical el segmento que une los puntos (1,1) y (1,2)?.

?- vertical(seg(punto(1,1),punto(1,2))). Yes

¿Es vertical el segmento que une los puntos (1,1) y (2,2)?. ?- vertical(seg(punto(1,1),punto(2,2))).

No

u ¿Hay algún Y tal que el segmento que une los puntos (1,1) y (2,Y) sea vertical?. ?- vertical(seg(punto(1,1),punto(2,Y))).

No

¿Hay algún X tal que el segmento que une los puntos (1,2) y (X,3) sea vertical?. ?- vertical(seg(punto(1,2),punto(X,3))).

X = 1

¿Hay algún Y tal que el segmento que une los puntos (1,1) y (2,Y) sea horizontal?. ?- horizontal(seg(punto(1,1),punto(2,Y))).

Y = 1

Page 7: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Objetos estructurados (V) ¿Para qué puntos el segmento que comienza en (2,3) es vertical?.

?- vertical(seg(punto(2,3),P)). P = punto(2, _G459)

¿Hay alg´un segmento que sea horizontal y vertical?. ?- vertical(S),horizontal(S).

S = seg(punto(_G444, _G445),punto(_G444, _G445))

?- vertical(_),horizontal(_). Yes

no degenerado(S) se verifica si S es un segmento no degenerado (es decir, que no se reduce a un punto). Por ejemplo,

no_degenerado(seg(punto(1,2),punto(2,1)) => Yes

no_degenerado(seg(punto(1,2),punto(1,2)) => No

Programa: no_degenerado(seg(P1,P2)) :- P1 \== P2.

¿Todos los segmentos que son horizontales y verticales son degenerados?. ?- vertical(S),horizontal(S),no_degenerado(S).

No

Page 8: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Representación de listas

Lista vacía []

Enumeración de elementos [X1,X2,...,Xn]

Primeros elementos y resto [X1,X2,...,Xn|Y]

Ejemplos de listas (notación reducida)

[]

[a]

[1,2,3,4]

[[]]

[X|Y]

Page 9: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Unificación con listas (I) ¿Son unificables las siguientes listas?

[X|Y] y [1,2,3] ?- [X|Y] = [1,2,3].

X = 1

Y = [2, 3]

[X,Y|Z] y [1,2,3] ?- [X,Y|Z] = [1,2,3].

X = 1

Y = 2

Z = [3]

[X,Y] y [1,2,3] ?- [X,Y] = [1,2,3].

No

[X,Y|Z] y [1,2]

?- [X,Y|Z] = [1,2]. X = 1

Y = 2

Z = []

Page 10: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Unificación con listas (II) [X,a,b|[]] y [[b,L],a|L]

?- [X,a,b|[]] = [[b,L],a|L]. X = [b, [b]] L = [b]

[X,Y,Z] y [Y,Z,X]

?- [X,Y,Z] = [Y,Z,X]. X = _G171

Y = _G171 Z = _G171

[X,Y,Z] y [Y,Z|[]]

?- [X,Y,Z] = [Y,Z|[]]. No

p([X|R],h(X,[a|[R|L]])) y p([a],h(a,[L]))

?- p([X|R],h(X,[a|[R|L]])) = p([a],h(a,[L])). No

Page 11: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Operaciones con listas (I) Problema: Primer elemento y resto de una lista primero(L,X) se verifica si X es el primer elemento de la lista L

resto(L,X) se verifica si X es el resto de la lista L Ejemplo:

primero([a,b,c],X) => X=a

resto(([a,b,c],X) => X=[b,c]

Programa listas-1.pl primero([X|L],X).

resto([X|L],L).

Sesión: ?- primero([a,b,c],X).

X = a

Yes

?- primero([X,b,c],a).

X = a

?- primero([X,Y],a).

X = a Y = _G286

?- primero(X,a).

X = [a|_G353]

?- resto([a,b,c],L).

L = [b, c]

?- resto([a|L],[b,c]).

L = [b, c]

Page 12: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Operaciones con listas (II) Añadir un elemento a una lista cons(X,L1,L2) se verifica si L2 es la lista obtenida

añadiéndole X, como primer elemento, a la lista L1 Ejemplo cons(a,[b,c],L2) => L2 = [a,b,c]

Programa cons.pl cons(X,L1,[X|L1]).

Sesión: ?- cons(a,[b,c],L).

L = [a, b, c]

?- cons(X,L,[a,b,c]). X = a

L = [b, c] ;

Page 13: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Operaciones con listas (III) Concatenación de listas conc(L1,L2,L3) se verifica si L3 es la lista obtenida

escribiendo los elementos de L2 a continuación de los elementos de L1. Ejemplo conc([a,b],[c,d],L3) => L3 = [a,b,c,d]

Programa conc.pl conc([],L,L). conc([X|L1],L2,[X|L3]) :- conc(L1,L2,L3).

Esquema:

Page 14: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Operaciones con listas (IV) ¿Cuál es el resultado de concatenar las listas [a,b] y [c,d,e]?

?- conc([a,b],[c,d,e],L). L = [a, b, c, d, e]

¿Qué lista hay que añadirle al lista [a,b] para obtener [a,b,c,d]?. ?- conc([a,b],L,[a,b,c,d]).

L = [c, d]

¿Qué dos listas hay que concatenar para obtener [a,b]?. ?- conc(L1,L2,[a,b]).

L1 = [] L2 = [a, b] ; L1 = [a] L2 = [b] ;

L1 = [a, b] L2 = [] ; No

Page 15: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Operaciones con listas (V) ¿Pertenece b a la lista [a,b,c]?.

?- conc(L1,[b|L2],[a,b,c]). L1 = [a]

L2 = [c]

?- conc(_,[b|_],[a,b,c]). Yes

¿Es [b,c] una sublista de [a,b,c,d]? ?- conc(_,[b,c|_],[a,b,c,d]).

Yes

¿Es [b,d] una sublista de [a,b,c,d]? ?- conc(_,[b,d|_],[a,b,c,d]). No

¿Cuál es el último elemento de [b,a,c,d]?. ?- conc(_,[X],[b,a,c,d]).

X = d

Predicado predefinido: append(L1,L2,L3)

Page 16: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (I)

Descripción de la familia 1 El padre es Tomás García Pérez, nacido el 7

de Mayo de 1950, trabaja de profesor y gana 10.000 pesetas diarias

La madre es Ana López Ruiz, nacida el 10 de marzo de 1952, trabaja de médica y gana 15.000 pesetas diarias

El hijo es Juan García López, nacido el 5 de Enero de 1970, estudiante

La hija es María García López, nacida el 12 de Abril de 1972, estudiante

Page 17: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (II) familia(

persona([tomas,garcia,perez], fecha(7,mayo,1950),

trabajo(profesor,10000)),

persona([ana,lopez,ruiz], fecha(10,marzo,1952),

trabajo(medica,15000)),

[ persona([juan,garcia,lopez], fecha(5,enero,1970),

estudiante),

persona([maria,garcia,lopez], fecha(12,abril,1972),

estudiante) ]).

Page 18: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (III)

Descripción de la familia 2

El padre es José Pérez Ruiz, nacido el 6 de Marzo de 1953, trabaja de pintor y gana 20.000 pst/dia

La madre es Luisa Gálvez Pérez, nacida el 12 de Mayo de 1954, es médica y gana 15.000 pst/dia

Un hijo es Juan Luis Pérez Pérez, nacido el 5 de Febrero de 1980, estudiante

Una hija es María José Pérez Pérez, nacida el 12 de Junio de 1982, estudiante

Otro hijo es José María Pérez Pérez, nacido el 12 de Julio de 1984, estudiante

Page 19: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (IV) familia(

persona([jose,perez,ruiz], fecha(6,marzo,1953),

trabajo(pintor,20000)),

persona([luisa,galvez,perez], fecha(12,mayo,1954),

trabajo(medica,15000)),

[ persona([juan_luis,perez,perez], fecha(5,febrero,1980),

estudiante),

persona([maria_jose,perez,perez],

fecha(12,junio,1982),

estudiante),

persona([jose_maria,perez,perez],

fecha(12,julio,1984),

estudiante) ]).

Page 20: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (V) ¿Existe alguna familia sin hijos?

?- familia(_,_,[]). No

¿Existe alguna familia con un hijo? ?- familia(_,_,[_]).

No

¿Existe alguna familia con dos hijos? ?- familia(_,_,[_,_]).

Yes

¿Existe alguna familia con tres hijos? ?- familia(_,_,[_,_,_]).

Yes

¿Existe alguna familia con cuatro hijos? ?- familia(_,_,[_,_,_,_]).

No

Buscar los nombres de los padres de familia con tres hijos ?- familia(persona(NP,_,_),_,[_,_,_]).

NP = [jose, perez, ruiz] ; No

Page 21: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (VI) Hombres casados casado(X) se verifica si X es un hombre casado

casado(X) :- familia(X,_,_).

Consulta: ?- casado(X).

X = persona([tomas, garcia, perez], fecha(7, mayo, 1950),

trabajo(profesor, 10000)) ;

X = persona([jose, perez, ruiz], fecha(6, marzo, 1953),

trabajo(pintor, 20000)) ;

No

Page 22: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (VII) Mujeres casadas casada(X) se verifica si X es una mujer casada

casada(X) :- familia(_,X,_).

Consulta: ?- casada(X).

X = persona([ana, lopez, ruiz], fecha(10, marzo, 1952),

trabajo(medica, 15000)) ;

X = persona([luisa, galvez, perez], fecha(12, mayo, 1954),

trabajo(medica, 15000)) ;

No

Page 23: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Recuperación de la

información (VIII) Nombres de las mujeres casadas que trabajan

?- casada(persona([N,_,_],_,trabajo(_,_))). N = ana ; N = luisa ; No

Conceptos: Uso de objetos estructurados

Prolog como lenguaje de consulta de bases de datos.

Bases de datos como conjuntos de hechos

Selectores

Abstracción de datos

Page 24: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo: simulación de un

autómata (I) Autómata no determinista (con estado final e4) Representación del autómata (automata.pl): final(E) se verifica si E es el estado

final. final(e4).

trans(E1,X,E2) se verifica si se puede pasar del estado E1 al estado E2 usando la letra X trans(e1,a,e1).

trans(e1,a,e2).

trans(e1,b,e1).

trans(e2,b,e3).

trans(e3,b,e4).

Page 25: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo: simulación de un

autómata (II) nulo(E1,E2) se verifica si se puede pasar del estado E1 al

estado E2 mediante un movimiento nulo. nulo(e2,e4).

nulo(e3,e1).

acepta(E,L) se verifica si el autómata, a partir del estado E acepta la lista L Ejemplo:

acepta(e1,[a,a,a,b]) => Sí

acepta(e2,[a,a,a,b]) => No

Definición: acepta(E,[]) :- final(E). acepta(E,[X|L]) :- trans(E,X,E1), acepta(E1,L).

acepta(E,L) :- nulo(E,E1), acepta(E1,L).

Page 26: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo: simulación de un

autómata (III) Determinar si el autómata acepta la lista [a,a,a,b]

?- acepta(e1,[a,a,a,b]). Yes

Determinar los estados a partir de los cuales el autómata acepta la lista [a,b] ?- acepta(E,[a,b]).

E=e1 ;

E=e3 ;

No

Determinar las palabras de longitud 3 aceptadas por el autómata a partir del estado e1 ?- acepta(e1,[X,Y,Z]).

X = a

Y = a

Z = b ;

X = b

Y = a

Z = b ;

No

Page 27: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo:

problema del mono (I) Descripción:

Un mono se encuentra en la puerta de una habitación. En el centro de la habitación hay un plátano colgado del techo. El mono está hambriento y desea coger el plátano, pero no lo alcanza desde el suelo. En la ventana de la habitación hay una silla que el mono puede usar. El mono puede realizar las siguientes acciones: pasear de un lugar a otro de la habitación, empujar la silla de un lugar a otro de la habitación (si está en el mismo lugar que la silla), subirse en la silla (si está en el mismo lugar que la silla) y coger el plátano (si está encima de la silla en el centro de la habitación).

Page 28: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo:

problema del mono (II)

Representación:

estado(PM,AM,PS,MM) PM posición del mono (puerta, centro o

ventana)

AM apoyo del mono (suelo o silla)

PS posición de la silla (puerta, centro o ventana)

MM mano del mono (con o sin) plátano

movimiento(E1,A,E2) se verifica si E2 es el estado que resulta de realizar la acción A en el estado E1

Page 29: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo:

problema del mono (III) movimiento(estado(centro,silla,centro,sin),

coger, estado(centro,silla,centro,con)).

movimiento(estado(X,suelo,X,U), subir, estado(X,silla,X,U)).

movimiento(estado(X1,suelo,X1,U), empujar(X1,X2), estado(X2,suelo,X2,U)).

movimiento(estado(X,suelo,Z,U), pasear(X,Z),

estado(Z,suelo,Z,U)).

Page 30: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo:

problema del mono (IV)

Solución:

solucion(E,S) se verifica si S es una sucesión de acciones que aplicadas al estado E permiten al mono coger el pl´atano.

Ejemplo: ?- solucion(estado(puerta,suelo,ventana,sin),L).

L = [pasear(puerta, ventana),

empujar(ventana, centro),

subir,

coger] ;

No

Page 31: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo:

problema del mono (V) Definición: solucion(estado(_,_,_,con),[]).

solucion(E1,[A|L]) :-

movimiento(E1,A,E2), solucion(E2,L).

Page 32: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Ejemplo: problema

del mono (VI)

solucion(estado(p,s,v,_),L).

Page 33: Información estructurada. Listas (2010/2011) - Practica1.pdf · Objetos estructurados Representación de listas Recuperación de la información Ejemplo: simulación de un autómata

Bibliografía Bratko, I. Prolog Programming for Artificial

Intelligence (2nd ed.) (Addison–Wesley, 1990) Cap. 2: “Syntax and meaning of Prolog programs”

Cap. 3: “Lists, operators, arithmetic”

Cap. 4: “Using Structures: Example Programs”

Van Le, T. Techniques of Prolog Programming (John Wiley, 1993) Cap. 2: “Declarative Prolog programming”.

Clocksin, W.F. y Mellish, C.S. Programming in Prolog (Fourth Edition) (Springer Verlag,1994) Cap. 2: “A closer look”

Cap. 3: “Using Data Structures”