Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación...
Transcript of Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación...
![Page 1: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/1.jpg)
Programación Declarativa 1
Tema IITema II
El Lenguaje Lógico PROLOGEl Lenguaje Lógico PROLOG
![Page 2: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/2.jpg)
Programación Declarativa 2
Prolog
El paso del modelo teórico de programación lógica a un lenguaje práctico requiere:
La mecanización del método de resolución SLD(reglas de cálculo y de búsqueda y backtracking)
Un tratamiento predefinido para las expresiones aritméticas.(predicados aritméticos extralógicos)
La incorporación de facilidades para la entrada y salida de datos (predicados extralógicos de E/S)
Prolog utiliza la regla de cálculo primero por la izquierda y aplica elorden textual como regla de búsqueda, incorpora backtracking y dispone de predicados extralógicos para cálculos aritméricos y para la gestión de la entrada y salida de datos.
![Page 3: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/3.jpg)
Programación Declarativa 3
Programación lógica y bases de datos relacionalesLa P. L. se puede utilizar para la representación/interrogación de bases de datos relacionales.
Base de datos relacional: dominios D1, ..., Dn relaciones R ⊆ Di1 × ... × Dip
Dominios en P. L.:predicados monariosestructuras
Relaciones en P. L.: predicadosextensionales (mediante hechos)intensionales (mediante reglas)
![Page 4: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/4.jpg)
Programación Declarativa 4
Dominios (I)
o Predicados monariosvaron(antonio). hembra(ana).varon(luis). hembra(pepa).varon(jose). hembra(lola).varon(andres). hembra(maria).... ...
o Estructurasnacimiento(juan,fecha(2,nov,1993))....aniversario(P,dia(D,M)):-
nacimiento(N,fecha(D,M,_)).o Combinación de ambas formas (dominios recursivos)
natural(0).natural(s(N)):- natural(N).
![Page 5: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/5.jpg)
Programación Declarativa 5
Dominios (II)
Los predicados sobre dominios se pueden utilizar:
Para comprobar la pertenencia de un objeto a un dominio::-varon(luis).:-varon(lola)....
Para generar valores del dominio::-varon(X). :-natural(X).X = antonio X = 0X = luis X = s(0)X = jose X = s(s(0))X = andres X = s(s(s(0)))
X = s(s(s(s(0))))...
![Page 6: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/6.jpg)
Programación Declarativa 6
Relaciones (def. extensional)
Relaciones familiares:% procrean ⊆ Varon × Hembra × Persona
procrean(antonio,ana,jose).procrean(antonio,ana,luis).procrean(antonio,pepa,maria).procrean(andres,lola,antonio)....Agenda:
% anivesario ⊆ Persona × Fechaaniversario(antonio,dia(3,feb)).aniversario(lola,dia(24,nov))....
![Page 7: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/7.jpg)
Programación Declarativa 7
Relaciones (def. intensional)
% padre ⊆ Varon × Persona padre(P,H):- procrean(P,M,H).
% hijo ⊆ Varon × Persona hijo(H,P):- varon(H),
procrean(P,M,H).hijo(H,M):- varon(H),
procrean(P,M,H).% abuelo ⊆ Varon × Persona
abuelo(A,N):- procrean(A,M,P),procrean(P,M1,N).
abuelo(A,N):- procrean(A,M,M1),procrean(P,M1,N).
![Page 8: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/8.jpg)
Programación Declarativa 8
Formas de interrogación
:- procrean(antonio,ana,H).:- procrean(antonio,_,H).:- procrean(P,M,maria).
:- aniversario(antonio,D).:- aniversario(P,dia(3,abril)).- aniversario(P,dia(_,abril)).
:- abuelo(andres,N).:- abuelo(A,maria).
![Page 9: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/9.jpg)
Programación Declarativa 9
Aspectos de la programación PROLOG que se deben controlar
![Page 10: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/10.jpg)
Programación Declarativa 10
Orden de las reglas
Afecta al orden de las ramas en el árbol de búsqueda.Repercute en:
El orden en que se generan las soluciones.hijo(H,M):- varon(H), procrean(P,M,H).hijo(H,P):- varon(H), procrean(P,M,H). :-hijo(luis,X).
Posibilidad de alcanzar algunas soluciones (ramas infinitas)
antepasado(A,D):- progenitor(A,D). :- antepasado(A,maria).antepasado(A,D):- antepasado(A,P), progenitor(P,D).
antepasado(A,D):- antepasado(A,P), progenitor(P,D).antepasado(A,D):- progenitor(A,D). :- antepasado(A,maria).
![Page 11: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/11.jpg)
Programación Declarativa 11
Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I)Afecta al número de ramas y a la longitud de las ramas del árbolde búsqueda.Repercute en:
El orden en que se generan las soluciones.El número de cálculos que se deben realizar.La terminación de los cálculos.
hijo(H,P):- procrean(P,M,H), varon(H). :-hijo(H,antonio).hijo(H,M):- procrean(P,M,H),varon(H).
antepasado(A,D):- progenitor(A,D). :- antepasado(A,maria).antepasado(A,D):- progenitor(P,D), antepasado(A,P).
![Page 12: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/12.jpg)
Programación Declarativa 12
Orden de las fórmulas atómicas en el cuerpo de las cláusulas (II)Los diferentes órdenes de las llamadas a predicados en los cuerpos de las cláusulas representan diferentes formas de buscar soluciones.Afecta al uso de los predicados:
abuelo/a(A,N):- progenitor(A,P), progenitor(P,N).
:-abuelo/a(+,?).
abuelo/a(A,N):- progenitor(P,N), progenitor(A,P).
:-abuelo/a(?,+).
![Page 13: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/13.jpg)
Programación Declarativa 13
Solapamientos
La posibilidad de aplicar dos reglas a un mismo conjunto de valores repercute en la aparición de soluciones repetidas que afectan a la eficiencia de los cálculos
minimo(X,Y,X):- menorigual(X,Y).minimo(X,Y,Y):- menorigual(Y,X).
:- minimo(3,3,M).
![Page 14: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/14.jpg)
Programación Declarativa 14
Aplicación al diseño de programas
En los cuerpos de las cláusulas se debe:
Comenzar con fórmulas atómicas que reduzcan el espacio de búsqueda.
Proteger las llamadas recursivas.
Evitar solapamientos
![Page 15: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/15.jpg)
Programación Declarativa 15
Definición de relaciones conpropiedades particulares
![Page 16: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/16.jpg)
Programación Declarativa 16
Relaciones reflexivas
Definición: clausura reflexiva de una relación no reflexiva
Sin restricción de tipo:r(a,b)....r(X,X).
Con restricción de tipo:r(a,b)....r(X,X):- t(X).
Ejemplo:mismaEdad(juan,antonio)....mismaEdad(P,P):- persona(P).
![Page 17: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/17.jpg)
Programación Declarativa 17
Relaciones simétricas
Definición: Clausura simétrica de una relación asimétrica
Divergente:r(a,b)....r(X,Y):- r(Y,X).:-r(a,X).
Convergente:r’(a,b)....r(X,Y):- r’(X,Y).r(X,Y):- r’(Y,X).:-r(a,X).
Ejemplo: Grafo no orientadoarco(a,b). eje(X,Y):-arco(X,Y).... eje(X,Y):-arco(Y,X).
![Page 18: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/18.jpg)
Programación Declarativa 18
Relaciones transitivas
Definición: Clausura transitiva de una relación intransitiva
Divergente:r(a,b)....r(X,Y):- r(X,Z),
r(Z,Y).:-r(a,X).
Convergente:r’(a,b)....r(X,Y):- r’(X,Y).r(X,Y):- r’(X,Z),
r(Z,Y).:-r(a,X).
Ejemplo: Camino en un grafo orientado
![Page 19: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/19.jpg)
Programación Declarativa 19
Relaciones de preorden
Clausura reflexiva y transitiva de una relación intransitiva
r’(a,b)....r(X,X).r(X,Y):- r’(X,Z),r(Z,Y).
Ejemplo: relación de conexión en un grafo orientado
![Page 20: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/20.jpg)
Programación Declarativa 20
Relaciones de equivalencia
Clausura reflexiva y transitiva de la clausura simétrica de una relación asimétrica
r’’(a,b)....r’(X,Y):- r’’(X,Y).r’(X,Y):- r’’(Y,X).r(X,X).r(X,Y):- r’(X,Z),r(Z,Y).
Ejemplo: relación de conexión en un grafo no orientado
![Page 21: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/21.jpg)
Programación Declarativa 21
Álgebra de relaciones
![Page 22: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/22.jpg)
Programación Declarativa 22
Unión
![Page 23: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/23.jpg)
Programación Declarativa 23
Intersección
![Page 24: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/24.jpg)
Programación Declarativa 24
Producto cartesiano
![Page 25: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/25.jpg)
Programación Declarativa 25
Diferencia
![Page 26: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/26.jpg)
Programación Declarativa 26
Proyección
![Page 27: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/27.jpg)
Programación Declarativa 27
Selección
![Page 28: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/28.jpg)
Programación Declarativa 28
Programación recursiva:Aritmética del número natural
![Page 29: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/29.jpg)
Programación Declarativa 29
Dominio de los números naturales
Definición recursiva del dominio:nat = 0 | s(nat)
Representación de los números:0, s(0), s(s(0)), s(s(s(0))), ..., s(...n...(0)...), ...
Definición del dominio mediante predicado:nat(0).nat(s(N)):- nat(N).
Usos del predicado::-nat(s(s(s(0)))). :-nat(s(s(a))).:-nat(N).
![Page 30: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/30.jpg)
Programación Declarativa 30
Ejercicios
1) Definir el dominio de los números pares: % par(N)
2) Definir el dominio de los números impares: % impar(N)
![Page 31: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/31.jpg)
Programación Declarativa 31
Suma de números naturales
Definición recursiva: X+0 = XX+s(Y) = s(X+Y)
% suma(X,Y,X+Y)suma(X,0,X):- nat(X).suma(X,s(Y),s(Z)):- suma(X,Y,Z).
Usos del predicado suma: (+,+,-) (-,+,+) (+,-,+) (-,-,+)Para sumar: :-suma(s(s(0)),s(0),X).Para restar: :-suma(X,s(0),s(s(0))).Para descomponer: :-suma(X,Y,s(s(0))).
![Page 32: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/32.jpg)
Programación Declarativa 32
Suma: flujo de datos
suma(X,0,X):- nat(X). %(+,+,-)suma(X,s(Y),s(Z)):- suma(X,Y,Z).
suma(X,0,X):- nat(X). %(-,+,+)
suma(X,s(Y),s(Z)):- suma(X,Y,Z).
suma(X,0,X):- nat(X). %(-,-,+)
suma(X,s(Y),s(Z)):- suma(X,Y,Z).
![Page 33: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/33.jpg)
Programación Declarativa 33
Producto de números naturales
Definición recursiva: X*0 = 0X*s(Y) = X*Y + X
% producto(X,Y,X*Y)producto(X,0,0):- nat(X).producto(X,s(Y),Z):- producto(X,Y,P),suma(P,X,Z).
Usos del predicado producto: (+,+,-) (+,-,-) (-,+,-)
Para multiplicar: :- producto(s(s(0)),s(s(0)),P).Para generar múltiplos: :- producto(s(s(0)),Y,P).
:- producto(X,s(s(0)),P).
![Page 34: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/34.jpg)
Programación Declarativa 34
Ejercicios (Definir y estudiar comportamientos)
1) Predicado para descomponer un número N en suma de dos números pares, cuando sea posible.
2) Predicado para calcular potencias:% N^0 = 1, para N>0% 0^N = 0, para N>0% N^(M+1) = (N^M) * N, para N>0
3) Predicado para calcular factoriales:% 0! = 1% (N+1)! = N! * (N+1)
4) Predicado para generar números de Fibonacci:% f(0) = 1% f(1) = 1% f(N+2) = f(N) + f(N+1)
![Page 35: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/35.jpg)
Programación Declarativa 35
Ordenación de números naturales(Definir y estudiar comportamientos)% 0 ≤ Y% s(X) ≤ s(Y) X ≤ Y
% 0 < s(Y)% s(X) < s(Y) X < Y
% min(X,Y) = X si X ≤ Y% min(X,Y) = Y si Y< X
% generador acotado de números:% entre(I,J) = K si I ≤ K ≤ J
![Page 36: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/36.jpg)
Programación Declarativa 36
Cociente de números naturales(Definir y estudiar comportamientos)% Dd = Ds*C + R% Dd/Ds = 0 si Dd < Ds y 0 < Ds% Dd/Ds = s((Dd-Ds)/Ds) si Dd ≥ Ds y 0 < Ds
% Cociente de una división entera% Resto de una división entera% Cociente y resto de una división entera
% Máximo común divisor:% mcd(X,X) = X, si 0 < X% mcd(X,Y) = mcd(X-Y,Y), si 0 < Y < X% mcd(X,Y) = mcd(X,Y-X), si 0 < X < Y
![Page 37: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/37.jpg)
Programación Declarativa 37
Estrategias de diseño recursivo de predicados
![Page 38: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/38.jpg)
Programación Declarativa 38
Composición de sustituciones vs. acumulador
suma(N,0,N):- nat(N).suma(N,s(M),s(Z)):- suma(N,M,Z).
:-suma(s(0),s(s(s(0))),Z). Z = s(Z1):-suma(s(0),s(s(0)),Z1). Z1 = s(Z2):-suma(s(0),s(0),Z2). Z2 = s(Z3):-suma(s(0),0,Z3). Z3 = s(0):-nat(s(0))....
Recursión
Cálculo de la solución
![Page 39: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/39.jpg)
Programación Declarativa 39
Cálculo con acumulador
suma(N,0,N):- nat(N).suma(N,s(M),Z):- suma(s(N),M,Z).
:-suma(s(0),s(s(s(0))),Z).:-suma(s(s(0)),s(s(0)),Z).:-suma(s(s(s(0))),s(0),Z):-suma(s(s(s(s(0)))),0,Z). Z = s(s(s(s(0)))):-nat(s(s(s(s(0)))))....
Recursión
![Page 40: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/40.jpg)
Programación Declarativa 40
Cálculo descendente vs. ascendente
fac(0,1).fac(s(N),F):- fac(N,F1),
producto(s(N),F1,F).
:-fac(s(s(0)),F).:-fac(s(0),F1),producto(s(s(0)),F1,F).:-fac(0,F2),producto(s(0),F2,F1),producto(s(s(0)),F1,F).:-producto(s(0),s(0),F1),producto(s(s(0)),F1,F).:-producto(s(s(0)),s(0),F).
F = s(s(0))
![Page 41: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/41.jpg)
Programación Declarativa 41
Cálculo ascendente (con acumuladores)
fac(N,F):-fac(N,s(0),F).fac(0,F,F).fac(s(N),A,F):- producto(s(N),A,A1),fac(N,A1,F).
:-fac(s(s(0)),F).:-fac(s(s(0)),s(0),F).:-producto(s(s(0)),s(0),A1),fac(s(0),A1,F).:-fac(s(0),s(s(0)),F).:-producto(s(0),s(s(0)),A2),fac(0,A2,F).:-fac(0,s(s(0)),F).
F = s(s(0))
![Page 42: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta](https://reader030.fdocuments.ec/reader030/viewer/2022040305/5eb314e77be3e27e24263615/html5/thumbnails/42.jpg)
Programación Declarativa 42
Ejercicios
Definición del producto con acumulador.
Definición de los números de Fibonacci con cálculodescendente y con cálculo ascendente