Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje...

26
Prolog Prolog II.4

Transcript of Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje...

Page 1: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

PrologProlog

II.4

Page 2: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

El lenguaje PrologProlog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Creador: Robert Kowalski Algoritmo = Lógica + Control Aspectos importantes:

La forma de representar la información. Las técnicas de búsqueda que se implementan en el

lenguaje.

Page 3: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales
Page 4: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales
Page 5: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

De Lógica de Primer Orden a Programas Lógicos

Sólo se permiten implicaciones en la representación de predicados.El formato es:∀Xi (P1

P∧2 … P∧ ∧

n → H)

Se denominan cláusulas de HornP

1 P∧

2 … P∧ ∧

n es el cuerpo

H es el encabezadoPrograma Lógico: Es una colección de cláusulas de Horn.

Page 6: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

De Programas Lógicos a Prolog

1. Eliminar los cuantificadores universales: Son asumidos por Prolog

2. Invertir la cláusula: P

1 P∧

2 … P∧ ∧

n → H

Se escribe: H ← P1 P∧

2 … P∧ ∧

n

3. Escribir ← como :- Se escribe: H :- P

1 P∧

2 … P∧ ∧

n

4. Escribir como comas y con un punto al final:∧ Se escribe: H :- P

1, P

2, … , P

n.

Page 7: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo

“En cualquier clase, si el maestro es bueno, o si el tema de la materia es de interés, entonces los estudiantes están atentos y animados”

∀ X (tiene_buen_maestro(X) ∨ tema_de_interés(X) → estudiantes_atentos(X) ∧ estudiantes_animados(X))

Escrito en un programa de Prolog:

estudiantes_animados(X) :- tiene_buen_maestro(X).estudiantes_animados(X) :- tema_de_interes(X).estudiantes_atentos(X) :- tiene_buen_maestro(X).estudiantes_atentos(X) :- tema_de_interes(X).

Page 8: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Búsqueda en Prolog

Los programas de Prolog son una base de datos con cláusulas de HornPara hacer una consulta: ?- busqueda_predicado(X).

Prolog busca en la base de datos: De forma secuencial, buscando la

correspondencia del encabezado y la aridad del predicado.

Page 9: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Búsqueda en PrologSi encuentra una correspondencia: Verifica si puede hacer correspondencia con los argumentos: Usando las variables en el cuerpo de la cláusula Haciendo Unificación:

Las variables son instanciadas con constantes

Si existe correspondencia, la consulta es true.Si no encuentra correspondencia, se asume falsa.

Page 10: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo deEjemplo dePrologProlog

II.4

Page 11: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo

Pamela Tomás

Roberto Elizabeth

Ana Patricia

Jaime

Page 12: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo

Pamela Tomás

Roberto Elizabeth

Ana Patricia

Jaime

padre(pamela,roberto).padre(tomas,roberto).padre(tomas,elizabeth).padre(roberto,ana).padre(roberto,patricia).padre(patricia,jaime).

Familia.pl

Page 13: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo

Se carga el programa usando [nombre].

Page 14: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo

Una consulta con éxito

Una consulta sin éxito

Page 15: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo

Otras consultas:

?- padre(X, elizabeth).?- padre(roberto,X).?- padre(X,Y).

Page 16: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Ejemplo

¿Quién es el abuelo de Jaime?

?- padre(X, jaime),padre(Y,X).

¿Quién es el nieto de Tomás?

?- padre(tomas,X),padre(X,Y).

¿Ana y Patricia tienen el mismo padre?

?- padre(X,ana),padre(X,patricia).

Page 17: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

17

Tarea 40:

1.- Utilizando el programa lógico “familia.pl”, ¿cuál es el resultado de las siguientes consultas? a).- ?- padre(jaime,X). b).- ?- padre(X,jaime). c).- ?- padre(pamela,X), padre(X,patricia). d).- ?- padre(pamela,X), padre(X,Y), padre(Y,jaime).2.- ¿Cuál es el significado de los incisos c y d?3.- Formule una consulta en Prolog para lo siguiente: a).- ¿Quién es el padre de Patricia? b).- ¿Tiene Elizabeth un hijo? c).- ¿Quién es el abuelo de Patricia?

Page 18: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

18

Cláusula de Horn

La relación definida en el programa lógico es “padre de”.¿Cómo se puede definir “es hijo de”?

Page 19: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

19

Cláusula de Horn

La relación definida en el programa lógico es “padre de”.¿Cómo se puede definir “es hijo de”?

“si X es padre de Y, entonces Y es hijo de X”

padre(X,Y) → eshijo(Y,X).

Page 20: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

20

Cláusula de Horn

La relación definida en el programa lógico es “padre de”.¿Cómo se puede definir “es hijo de”?

“si X es padre de Y, entonces Y es hijo de X”

padre(X,Y) → eshijo(Y,X).

En Prolog:

eshijo(Y,X) :- padre(X,Y).

Page 21: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

21

Cláusula de Horn

¿Cómo se puede definir “es madre de”?

Es necesario definir el concepto de sexo en la persona:

mujer(pamela).hombre(tomas).hombre(roberto).mujer(elizabeth).mujer(patricia).mujer(ana).hombre(jaime).

Page 22: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

22

Cláusula de Horn

¿Cómo se puede definir “es madre de”?

“Si X es padre de Y, y X es mujer, entonces X es madre de Y”

padre(X,Y) mujer(X)∧ → madre(X,Y).

En Prolog:

madre(X,Y) :- padre(X,Y),mujer(X).

Page 23: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

23

Cláusula de Horn

¿Cómo se puede definir “es abuelo de”?

Page 24: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

24

Cláusula de Horn

¿Cómo se puede definir “es abuelo de”?

padre(X,Y) padre(Y,Z)∧ → abuelo(X,Z).

En Prolog:

abuelo(X,Z) :- padre(X,Y),padre(Y,Z).

Page 25: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

25

Cláusula de Horn

¿Cómo se puede definir “es hermana de”?

padre(Z,X) padre(Z,Y)∧ mujer(X)∧ → hermana(X,Y).

En Prolog:

hermana(X,Y) :- padre(Z,X),padre(Z,Y),mujer(X).

Page 26: Prolog - Ingeniería en Sistemas Computacionales | … · El lenguaje Prolog Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

26

Tarea 41:

1.- Formule las cláusulas de Horn para lo siguiente: a).- Cualquiera que tiene un hijo es feliz (Defina la relación “feliz”). b).- Para todo X, si X tiene un hijo que tiene una hermana, entonces X tiene dos hijos (Defina la relacion “tienedoshijos”).

2.- Defina la relación “nieto” usando la relación “padre”. Ésta es similar a la relación “abuelo”.

3.- Defina la relación “tia(X,Y)” en términos de las relaciones “padre” y “hermana”.