apunte05 todo
TRANSCRIPT
-
7/22/2019 Apunte05 Todo
1/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
1
Lenguajes de Programacin
Captulo V:
Programacin Lgica
-
7/22/2019 Apunte05 Todo
2/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
2
Lenguajes de Programacin
5.1 Breve Introduccin al Clculo
de Predicados
-
7/22/2019 Apunte05 Todo
3/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-3
Lenguajes de Programacin
Definiciones Bsicas
Proposicin:sentencia lgica que puede serverdadera o falsa.
Se construye de objetos y relaciones. Lgica formal provee mtodos para verificar su validez
Lgica Simblica:permiteexpresarproposiciones,relaciones entre proposiciones ycmo inferir nuevas proposiciones que sonverdaderas.
Clculo de Predicado:Forma particular de lgica
simblica usada en programacin lgica.
-
7/22/2019 Apunte05 Todo
4/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-4
Lenguajes de Programacin
Objetos y Trminos Compuestos
Objetosse representan como un nico trmino,que puede ser:
constante: representa un nico objeto variable: puede representar diferentes objetos
Trmino compuesto: consiste de functory unalista de parmetros Un trmino con nparmetros se denomina n-tupla.
El trminopadre(maria, jess)es una 2-tupla.
-
7/22/2019 Apunte05 Todo
5/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-5
Lenguajes de Programacin
Proposiciones
Proposicionespueden ser: Atmicas:corresponde a un nico trmino compuesto
Compuestas: dos o ms proposiciones atmicasconectadas por operadores lgicos.
Una proposiciones puede ser: Hecho: se define como una verdad (axioma)
Consulta: la verdad debe ser probada (teorema)
-
7/22/2019 Apunte05 Todo
6/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-6
Lenguajes de Programacin
Proceso de Resolucin
Presencia de variables requiere de un proceso decalce(matching) que al reemplazar sus valores
produce una verdad (xito). Este proceso se denomina unificacin.
Asignacin temporal de valores a variables sedenomina instanciacin.
Fallas (no xito) en la instanciacin requiere debacktracking.
-
7/22/2019 Apunte05 Todo
7/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-7
Lenguajes de Programacin
Clusulas de Horn
Clusulas de Hornsimplifican el proceso deresolucin, y permiten representar la mayora de
las proposiciones lgicas. Slo permite dos tipos de formas:
Existe slo una proposicin atmica en la izquierda dela clusula (clusula con cabeza)
El lado izquierdo est vaco (clusula sin cabeza) Clusulas con cabeza se usan para definir reglas,
en cambio clusulas sin cabezas slo establecen
ciertos hechos.
-
7/22/2019 Apunte05 Todo
8/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-8
Lenguajes de Programacin
Significado
Declarativo versus ProceduralLa clusula:
P
-
7/22/2019 Apunte05 Todo
9/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-9
Lenguajes de Programacin
Conclusiones
Programacin Lgica consiste bsicamenteen definir un conjunto de reglas y hechos
(hiptesis). El sistema luego debe ser capaz de inferir si
una determinada proposicin (meta) es una
verdad. Prolog est basado en el uso de clusulas de
Horn.
-
7/22/2019 Apunte05 Todo
10/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
10
Lenguajes de Programacin
5.2 Introduccin a Prolog
-
7/22/2019 Apunte05 Todo
11/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-11
Lenguajes de Programacin
Caractersticas de Prolog
Basado en Lgica y programacin declarativa
Produce estilo de programacin orientado a metas
No se especifica cmodebe hacerse, sino qudebe lograrse (alto nivel)
El programador se concentra ms en el
conocimiento que en los algoritmos Qu es conocido?(hechos y relaciones ) Qu preguntar?(cmo resolverlo)
f
-
7/22/2019 Apunte05 Todo
12/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-12
Lenguajes de Programacin
Hechos en Prolog: Ejemplo
padre(maria, pedro).
padre(juan, pedro).
padre(juan, carola).padre(pedro, ana).
padre(pedro, paty).
padre(paty, aldo).
ana
maria juan
pedro carola
paty
aldo
D t t d I f ti
-
7/22/2019 Apunte05 Todo
13/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-13
Lenguajes de Programacin
Consultas en Prolog
?- padre(pedro, ana).
=> yes
?- padre(ana, paty).=> no
?- padre(X, carola).
=> X = juan
?- padre(pedro, X).
=> X = ana ;
=> X = paty ;
=> no
D t t d I f ti
-
7/22/2019 Apunte05 Todo
14/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-14
Lenguajes de Programacin
Consulta: Ejemplo 1
Preguntar por el abuelo de aldo:
X, Y : (X es padre de Y) (Y es padre de aldo)
que se expresa en Prolog como:
?- padre(X, Y), padre(Y, aldo).
=> X = pedro
Y = paty
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
15/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-15
Lenguajes de Programacin
Consulta: Ejemplo 2
Preguntar por los nietos dejuan:
X, Y : (juan es padre de X) (X es padre de Y)
que se expresa en Prolog como:
?- padre(juan, X), padre(X, Y).
=> X = pedroY = ana ;
=> X = pedro
Y = paty
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
16/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-16
Lenguajes de Programacin
Consulta: Ejemplo 3
Preguntar si anay patytienen un padre en comn:
X : (X es padre de ana) (X es padre de patricio)
que se expresa en Prolog como:
?- padre(X, ana), padre(X, paty).
=> X = pedro
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
17/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-17
Lenguajes de Programacin
Otros Hechos
Agregar clusulas sobre el sexo de las personas(relaciones unarias):
femenino(maria).masculino(juan).
masculino(pedro).
femenino(carola).
femenino(ana).
femenino(paty).masculino(aldo).
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
18/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-18
Lenguajes de Programacin
Alternativa de definicin de
hechosPodra haberse definido tambin con una relacin binaria:
sexo(maria, femenino).
sexo(juan, masculino).sexo(pedro, masculino).
sexo(carola, femenino).
sexo(ana, femenino).
sexo(paty, femenino).
sexo(aldo, masculino).
A continuacin usaremos la forma unaria!
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
19/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-19
Lenguajes de Programacin
Reglas en Prolog
La relacin:a b
se expresa en Prolog como:a :- b.
Una clusula de este tipo se denomina regla, quetiene la siguiente estructura:
la cabeza(parte izquierda de :-) es la conclusin la proposicin definida en el cuerpo(parte derecha de :-)
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
20/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-20
Lenguajes de Programacin
Resolucin Simple
La relacin hi jo decorresponde a:X, Y : (Y es hijo de X) (X es padre de Y)
que se expresa en Prolog como:hijo(X, Y) :- padre(Y, X).
Ejemplo:la meta siguiente es evaluada como:La meta: hijo(paty, pedro)se convierte en submeta padre(pedro, paty)
Se busca este hecho: yes
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
21/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-21
Lenguajes de Programacin
Ejemplo de Reglas
Se puede definir ahora varias nuevas reglas como:
papa(X, Y) :- padre(X, Y), masculino(X).
mama(X, Y) :- padre(X, Y), femenino(X).
abuelo(X, Y) :- padre(X, Z), padre(Z, Y).
hermana(X, Y) :- padre(Z, X), padre(Z, Y), femenino(X).
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
22/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
V-1-22
Lenguajes de Programacin
Ejemplo de Consulta
?- hermana(ana, paty).
=> yes
?- hermana(X, paty).
=> X = ana ;
=> X = paty
oops ... paty es hermana de ella misma
Falta excluir este caso:
hermana(X, Y) :- diferente(X, Y), padre(Z, X),
padre(Z, Y), femenino(X).
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
23/71
p
Universidad Tcnica Federico Santa Mara
V-1-23
Lenguajes de Programacin
Resumiendo...
Programas Prolog se extienden simplemente agregando ms clusulas Clusulas son de tres tipos: hechos, reglasy consultas Reglasdeclaran cosas que cuya verdad depende de otras condiciones Por medio de consultasel usuario puede solicitar al programas que
establezca qu cosas son verdad Una clusulatiene una cabezay un cuerpo. El cuerpo son metas
separadas por comas (conjuncin) Hechosson clusulas que no tienen cuerpo Preguntasslo tienen cuerpo
Reglastienen cabeza y cuerpo Una evaluacin puede sustituir una variableX por otro objeto (se dice
que X se instancia) Variables se cuantifican universalmente ()
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
24/71
p
Universidad Tcnica Federico Santa Mara
V-1-24
Lenguajes de Programacin
Reglas Recursivas
La relacin antepasadose define sobre la base de unaregla de descendencia directa y otra regla de descendencia indirecta:
X, Z : (X es un antepasado de Z), si
{X es padre de Z }
{ Y: (X es padre de Y) (Y es antepasado de Z) }
Lo que en Prolog se expresa como :antepasado(X, Z) :- padre(X, Z). % descendiente directo
antepasado(X, Z) :- padre(X, Y), antepasado(Y, Z). % descendiente ind.
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
25/71
p
Universidad Tcnica Federico Santa Mara
V-1-25
Lenguajes de Programacin
Ejemplo de Consulta
% Consultar por los descendientes de maria
?- antepasado (maria, X)
=> X = pedro ;
=> X = ana ;
=> X = paty ;
=> X = aldo
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
26/71
Universidad Tcnica Federico Santa Mara
V-1-26
Lenguajes de Programacin
Resolucin de Consulta
antepasado(juan, paty)
NO
SI
padre(juan, paty)
Regla#1
padre(juan, X)antepasado(X, paty)
Regla#2
antepasado(pedro, paty)
Hecho:
padre(juan, pedro)X=pedro
padre(pedro, paty)
Regla#1
ana
maria juan
pedro carola
paty
aldo
-
7/22/2019 Apunte05 Todo
27/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
27
Lenguajes de Programacin
5.3 Tipos de Datos en Prolog
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
28/71
Universidad Tcnica Federico Santa Mara
V-1-28
Lenguajes de Programacin
Objetos de Datos en Prolog
Objetos de datos simples
Objetos estructurados
Calce de operaciones fundamentales sobreobjetos
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
29/71
Universidad Tcnica Federico Santa Mara
V-1-29
Lenguajes de Programacin
Reconocimiento de Tipos
Se reconoce el tipo de un dato por su formasintctica; no se requiere de declaracin de
tipos Ejemplo:
Variables se definen comienzan con primera en
maysculas (e.g. X) Atomos comienzan con una letra en minscula
(e.g.pedro)
Departamento de Informtica
j d i
-
7/22/2019 Apunte05 Todo
30/71
Universidad Tcnica Federico Santa Mara
V-1-30
Lenguajes de Programacin
Atomos
1) Strings de letras, dgitos y underscore (_),comenzando con minscula
pedro nil x_25 algo_especial 2) Strings de caracteres especiales
===> ...
3) Strings con citacin simpleJuan San Francisco
Departamento de Informtica
L j d P i
-
7/22/2019 Apunte05 Todo
31/71
Universidad Tcnica Federico Santa Mara
V-1-31
Lenguajes de Programacin
Variables
Strings de letras, dgitos y underscore,comenzando con mayscula o underscore.X Resultado _X1 _12
Si una variable aparece una solo vez en unaclusula, se puede usar variables annima_?- padre(juan, _).
yes % no se imprime variable
tiene_hijo(X) :- padre(X, _).
mbito de variable es una clusula
Departamento de Informtica
L j d P i
-
7/22/2019 Apunte05 Todo
32/71
Universidad Tcnica Federico Santa Mara
V-1-32
Lenguajes de Programacin
Ejemplo con Figuras Geomtrica
2 4 6 8
2
4
6
P2 = (2,3)
P1 = (1,1)
(6,4)
(7,1)(4,2)
TS
P1 = punto(1, 1)
P2 = punto(2,3)
S = seg(P1, P2)
T = triangulo (punto(4,2),
punto(6,4), punto(7,1))
-
7/22/2019 Apunte05 Todo
33/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
33
Lenguajes de Programacin
5.4 Calce de Trminos en Prolog
Departamento de Informtica
Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
34/71
Universidad Tcnica Federico Santa Mara
V-1-34
Lenguajes de Programacin
Concepto de Calce
La operacin ms importante sobretrminos es el calce, que corresponde a la
unificacin en el clculo de predicados. Dos trminos calzansi:Son idnticos
Las variables en ambos trminos pueden serinstanciados, sustituyendo variables, tal que lostrminos se hacen idnticos.
Departamento de Informtica
Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
35/71
Universidad Tcnica Federico Santa Mara
V-1-35
Lenguajes de Programacin
Ejemplo de Calce
Calzar: fecha(D, M, 2000)yfecha(D1, mayo, A1) , entonces:
D se instancia a D1 M se instancia a mayo
A1 se instancia a 2000
Que como salida de Prolog se escribe: D = D1 M= mayo
A1 = 2000
Departamento de Informtica
Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
36/71
Universidad Tcnica Federico Santa Mara
V-1-36
Lenguajes de Programacin
Ejemplo de Calce
Calzar: fecha(D, M, 2000)yfecha(D1, julio, 1956) , entonces:
No es posible encontrar un calce (se dice que elproceso de calce ha fracasado).
En caso contrario, se dice que el proceso ha sidoexitoso.
Departamento de Informtica
Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
37/71
Universidad Tcnica Federico Santa Mara
V-1-37
Lenguajes de Programacin
Ejemplo de Calce en Prolog
?- fecha(D, M, 2000) = fecha(D1, mayo, A1).D = H86M = mayo
D1 = H86A1 = 2000
?- fecha(D, M, 2000) = fecha(D1, julio, 1956).
no
Departamento de Informtica
Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
38/71
Universidad Tcnica Federico Santa Mara
V-1-38
Lenguajes de Programacin
Reglas de Calce
Dos trminos S y T calzan, si: Si S y T son constantes, entonces S y T calzan si ambos
son el mismo objeto. Si S es una variabley T cualquier cosa, entonces calzan y
S se instancia como T. Viceversa, si T es variable,entonces T se instancia como S.
Si S y T son estructuras, entonces calzan slo si:
S y T tienen el mismo functor, yTodas sus correspondientes componentes calzan.Instanciaciones resultantes es determinado por proceso de calce decomponentes.
Departamento de Informtica
U i id d T i F d i S t M Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
39/71
Universidad Tcnica Federico Santa Mara
V-1-39
Lenguajes de Programacin
Grado de Ajuste del Calce
?- fecha(D, M, 2000) = fecha(D1, mayo, A1).
Podra haber sido calzado como:
D = 1D1 = 1M = mayoA1 = 2000
Pero esta forma es ms restrictiva (menos general)que la anterior.
Prolog calza el resultado a su forma ms general!
Departamento de Informtica
U i id d T i F d i S t M Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
40/71
Universidad Tcnica Federico Santa Mara
V-1-40
e gu jes de og c
Ejemplo de Calce de Estructuras
triangulo
punto puntoA
1 1 2 3
triangulo
punto puntoX
4 Y 2 Z
?- triangulo(punto(1, 1), A, punto(2, 3)) =
triangulo(X, punto(4, Y), punto(2, Z)).
A = punto(4,H193)X = punto(1,1)
Y = H193Z = 3
Departamento de Informtica
U i id d T i F d i S t M Lenguajes de Programacin
-
7/22/2019 Apunte05 Todo
41/71
Universidad Tcnica Federico Santa Mara
V-1-41
g j g
Ejemplo de Calce con Estructuras
?- vertical(seg(punto(1,1), punto(1,2))).
yes
?- vertical(seg(punto(1,1), punto(2,Y))).
no
?- horizontal(seg(punto(1,1), punto(2,Y))).
Y = 1
?- vertical(seg(punto(2,3), Y)).Y = punto(2,H561)
?- vertical(S), horizontal(S).
S = seg(punto(H576,H577),punto(H576,H577))
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
42/71
Universidad Tcnica Federico Santa Mara
V-1-42
g j g
Disjuncin en Clusulas
La clusula:
P :- Q; R.
Se puede interpretar como:
P :- Q.P :- R.
La clusula:
P :- Q, R;S, T, U.
Se puede interpretar como:
P :- Q, R.
P :- S, T, U.
-
7/22/2019 Apunte05 Todo
43/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
43
Lenguajes de Programacin
5.5 Listas y Operadores
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
44/71
Universidad Tcnica Federico Santa Mara
V-1-44
Listas en Prolog
Una lista en Prolog se puede escribir como:[perro, gato, ratn, loro]
Sin embargo esto es slo un sabor sintctico,pues Prolog lo traduce una forma de estructura.
Si existe la estructura .(Cabeza, Cola), entonces:
.(perro, .(gato, .(ratn, .(loro, []))))equivale a la lista anterior (que es ms legible)
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
45/71
Universidad Tcnica Federico Santa Mara
V-1-45
Representacin de Listas
Una lista define un rbol binario, similar a laslistas propias de Scheme.
Prolog permite una notacin similar a los pares: L = [a | Cola], donde aes la cabeza (cualquier tipo) y
Colaes el resto de la lista (debe ser una lista) .
La lista vaca se expresa como [].
Ejemplo:?- L2 = [ a | [b | []]].
L2 = [a,b]
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
46/71
Universidad Tcnica Federico Santa Mara
V-1-46
Algunos Posibles Operadores
sobre Listas Membresa del objeto X en la lista L:
member(X, L)
Concatenacinde listas L1 y L2 en L3conc(L1, L2, L3)
Agregarun elemento X en una lista L
add(X, L, L1) Borrarun elemento X en una lista L
del(X, L, L1)
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
47/71
Universidad Tcnica Federico Santa Mara
V-1-47
Definicin de Operadores (1/2)
%definicion de membresia de X en una lista L: member(X, L).
% ============================================
member(X, [X | Cola]).member(X, [Cabeza | Cola]) :- member(X, Cola).
% concatenacion de listas L1 y L2 en lista L3: conc(L1, L2, L3).
% ==============================================
% concat. con lista vacia es la misma listaconc([], L, L).
% caso de que primera lista no est vaca
conc([X | L1], L2, [X | L3]) :- conc(L1, L2, L3).
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
48/71
Universidad Tcnica Federico Santa Mara
V-1-48
Ejemplos de Operadores con
Listas
?- member(X, [a, b]).
X = a ;
X = b ;
no
?- conc([a], [b], L).
L = [a,b] ;
no
?- add(a, X, Y).
X = H918
Y = [a | H918] ;
no
?- del(b, [a, b, c, b, d], L).
L = [a,c,b,d] ;
L = [a,b,c,d] ;no
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
49/71
U e s dad c ca ede co Sa ta a a
V-1-49
Sublistas
Una sublista es una parte de una lista
El operador puede ser definido con la
siguiente regla:
Ejemplo:
?- sublist([b, X], [a, b, c, d]).
X = c
sublist(S, L) :- conc(L1, L2, L), conc(S, L3, L2).
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
50/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
50
Lenguajes de Programacin
5.6 Operadores y Aritmtica
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
51/71
V-1-51
Notacin de Operadores
Las operaciones en Prolog se expresannormalmente como functores.
Se permite tambin especificar operadoresespeciales con su relacin de precedenciamediante directivas al traductor Prolog.
Este mecanismo permite mejorar la lecturade programas (sabor sintctico), similar a lasobrecarga de operadores en C++
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
52/71
V-1-52
Ejemplo de Operadores
La expresin:
+(*(2, a), *(b, c))
podra escribirse como:
2*a + b*c
Que resulta ms legible!!
Ejemplo en Prolog:
?- X = +(*(2, 3), *(4, 5)).X = 2 * 3 + 4 * 5
?- X is +(*(2, 3), *(4, 5)).
X = 26 .
?- X is 2*3 + 4*5.
X = 26
Se ha supuesto que + tiene mayor precedencia que *
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
53/71
V-1-53
Ejemplo:
Mximo Comn Divisor
mcd(X, X, X).
mcd(X, Y, D) :-X
-
7/22/2019 Apunte05 Todo
54/71
V-1-54
Ejemplo:
Mximo Comn Divisor
?- mcd(100, 10, X).
X = 10
?- mcd(27, 36, X).
X = 9
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
55/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
55
Lenguajes de Programacin
5.7 Ejemplos de Programas
con Estructuras
Departamento de Informtica
-
7/22/2019 Apunte05 Todo
56/71
Departamento de Informtica
Universidad Tcnica Federico Santa Mara
56
Lenguajes de Programacin
Ejemplo de Programa
Problema de las Ocho Reinas
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
57/71
V-1-57
Problema de las Ocho Reinas
1
2
3
4
5
6
7
8
1 2 3 4 5 6 7 8
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
58/71
V-1-58
Solucin #1 en Prolog
solucion1([]).
solucion1([X/Y | Otras]) :- % primera reina en X/Y
solucion1(Otras),
member(Y, [1,2,3,4,5,6,7,8]),
noataque(X/Y, Otras). % Primera reina no ataca a otras
noataque(_, []).
noataque(X/Y, [X1/Y1 | Otras]) :-
Y =\= Y1, % diferentes filas
Y1 - Y =\= X1 - X, % diferentes diagonales
Y1 - Y =\= X - X1,
noataque(X/Y, Otras). % Primera reina no ataca a otras
plantilla([1/Y1, 2/Y2, 3/Y3, 4/Y4, 5/Y5, 6/Y6, 7/Y7, 8/Y8]).
solucion(S) :- plantilla(S), solucion1(S).
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
59/71
V-1-59
Consulta a la Solucin #1
?- solucion(S).
S = [1 / 4,2 / 2,3 / 7,4 / 3,5 / 6,6 / 8,7 / 5,8 / 1] ;
S = [1 / 5,2 / 2,3 / 4,4 / 7,5 / 3,6 / 8,7 / 6,8 / 1];
S = [1 / 3,2 / 5,3 / 2,4 / 8,5 / 6,6 / 4,7 / 7,8 / 1]
Departamento de InformticaL j d P i
-
7/22/2019 Apunte05 Todo
60/71
p
Universidad Tcnica Federico Santa Mara
60
Lenguajes de Programacin
5.8 Control de Backtracking
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
61/71
V-1-61
Porqu controlar Backtracking?
Prolog realiza backtracking automtico sifalla la satisfaccin de una clusula
Sin embargo, en algunos casos elbacktracking automtico es ineficiente
El programador puede controlar o prevenir
el backtracking usandocut.
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
62/71
V-1-62
Ejemplo de una Funcin
Suponga las siguientes tres reglas para unafuncin de doble escaln:
Regla#1:Si (X
-
7/22/2019 Apunte05 Todo
63/71
V-1-63
Funcin Expresada en Prolog
f(X, 0) :- X
-
7/22/2019 Apunte05 Todo
64/71
V-1-64
Evaluacin de la Meta
f(1, Y)2
-
7/22/2019 Apunte05 Todo
65/71
V-1-65
Funcin Expresada en Prolog
usando CUTf(X, 0) :- X
-
7/22/2019 Apunte05 Todo
66/71
V-1-66
Optimizando Evaluacin de
Funcin usando CUT
f(X, 0) :- X
-
7/22/2019 Apunte05 Todo
67/71
V-1-67
Negacin como Falla
A Mara le gustan los animales:gusta(maria, X) :- animal(X).
Pero no le gustan las serpientes!!
Expresado en Prolog:
gusta(maria, X) :- serpiente(X), !, fail;
animal(X).
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
68/71
V-1-68
Ejemplos de Negacin
La verificacin si dos expresiones difieren:
diferente(X, Y) :- X = Y, !, fail
;
true.
El procedimiento interno not de Prolog se comporta
como:
not(P) :- P, !, fail
;
true.
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
69/71
V-1-69
Aplicacin de la Negacin
La funcin diferente ahora se puede escribir como:
diferente(X, Y) :- not(X =Y).
Y la regla de Maria:
gusta(maria, X) :-
not(X = serpiente),animal(X).
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
70/71
V-1-70
Problema de las 8 Reinas
Expresada con Negacinsolucion1([]).
solucion1([X/Y | Otras]) :- % primera reina en X/Y
solucion1(Otras),
member(Y, [1,2,3,4,5,6,7,8]),not ataque(X/Y, Otras). % Primera reina no ataca a otras
ataque(X/Y, Otras) :-
member(X1/Y1, Otras),
(Y = Y1; % en la misma filas,
Y1 is Y + X1 - X; % en la mismas diagonalesY1 is Y + X - X1).
plantilla([1/Y1, 2/Y2, 3/Y3, 4/Y4, 5/Y5, 6/Y6, 7/Y7, 8/Y8]).
solucion(S) :- plantilla(S), solucion1(S).
Departamento de Informtica
Universidad Tcnica Federico Santa MaraLenguajes de Programacin
-
7/22/2019 Apunte05 Todo
71/71
Uso de Cut y Negacin
Ventajas
Se puede aumentar la eficiencia
Se pueden expresar reglas que son mutuamenteexluyentes
Desventajas
Se pierde correspondencia entre significado
declarativo y procedural Cambio del orden de las clusulas puede afectar
significado declarativo