Prog Logic A

39

Transcript of Prog Logic A

Page 1: Prog Logic A
Page 2: Prog Logic A

Paradigma de programación lógica

• Programación declarativaDescribir qué es la solución y no cómo calcularlaDescribir qué es la solución y no cómo calcularlaAlgo parecido a las reglas BNF que describen qué es una cadena palíndroma y no cómo calcularla, por ejemplo:p y , p j pCadenas palíndromas de 0, 1Por extensión S ::= 00 | 11 | 101 | 010, …Por comprensión S ::= S | 0S0 | 1S1 | 00 | 11 | 0 | 1

Un procesador (parser) luego las genera o reconoce

• Ventajas– Formalismo– Prototipar rápidamente

UTN - FRM: Paradigmas de Programación - Programación Lógica 2

Page 3: Prog Logic A

Fundamentos del paradigma

• Proposiciones lógicas

– Se construyen con objetos y relaciones (predicados)

– Verifica su validez mediante lógica formal

• Lógica simbólica

– Permite expresar proposiciones, relaciones entre ellas y cómoPermite expresar proposiciones, relaciones entre ellas y cómo inferir nuevas relaciones

• Cálculo de predicadosCálculo de predicados

– Forma de cálculo que utiliza el lenguaje

• Recursión• Recursión

– Para representar y procesar información

UTN - FRM: Paradigmas de Programación - Programación Lógica 3

Page 4: Prog Logic A

Fundamentos del paradigma•Lógica de primer orden

– Un literal proposicional es una variable proposicional o laUn literal proposicional es una variable proposicional o la negación de una: p, q , ~r, …

– Una cláusula proposicional es una disyunción de literales:  p V ~t V q V ~r

– En las formas clausales los cuantificadores universales están implícitosimplícitos

– Una cláusula de Horn es una cláusula cuantificada universalmente con no más de un literal positivo:p

1) q cláusula unitaria2) ~p1 V … V ~pn V q cláusulas de programa2)  p1 V … V pn V q cláusulas de programa3) ~p1 V … V ~pn

UTN - FRM: Paradigmas de Programación - Programación Lógica 4

Page 5: Prog Logic A

Fundamentos del paradigma

•Lógica de primer ordenL V V V d ibi li d l D M– Las  ~p1 V … V ~pn V q pueden re‐escribirse aplicando ley DeMorgan: ~p V ~q  ~(p Λ q)

~(p1 Λ … Λ p ) V q(p1 Λ … Λ pn) V qpor equivalencia de proposiciones: ~p V q = p => q(p1 Λ Λ p ) => q(p1 Λ … Λ pn)  > qantecedente => consecuente

Formas Normales DisyuntivasFormas Normales Disyuntivas Formas clausalesFormas clausalesA A V B V ~C V DV B V ~C V D C => A C => A V B V DV B V D~A V ~B V ~C V D~A V ~B V ~C V D A A ΛΛ B B ΛΛ C => DC => D…… ………… ……

UTN - FRM: Paradigmas de Programación - Programación Lógica 5

Page 6: Prog Logic A

Fundamentos del paradigma• Principales modos de inferencia

– Modus ponens: si p y (p  q) son verdaderas, q también es verdad

– Modus tolens: si (p  q) es verdad y q es falsa, entonces p es falsa

– Principio de resolución: si (A V B) es verdad y (~B V C) es verdad entonces (A V C) es verdad  (refutación)

• Métodos razonamiento de la lógica de predicados – Deductivo: VA, VB, VC [mayor(A, B) Λmayor(B, C)]  mayor(A, C)

– Abductivo: si (A  B) y B son verdaderas, entonces A posiblemente lo sea 

– Inductivo: si P(a), P(b), ......, P(n) son verdad, entonces se puede concluir que V X, P(X) también es verdad

UTN - FRM: Paradigmas de Programación - Programación Lógica 6

Page 7: Prog Logic A

Fundamentos del paradigma

• Para encontrar una solución, debemos especificar qué condiciones debe cumplir aquello que nos interesa averiguardebe cumplir aquello que nos interesa averiguar

• La estructura de un programa se plantea siguiendo un esquema p g p g qsimilar al de un teorema

• Teorema: proposición que afirma una verdad demostrableHi ó i l i (h h i )– Hipótesis: lo que se supone cierto (hechos o axiomas)

– Tesis: lo que se va a demostrar (reglas de inferencia)Demostración: verificación de la tesis (motor de inferencia de– Demostración: verificación de la tesis (motor de inferencia de Prolog)

• Al conjunto de hechos y reglas, se le suele denominar base de conocimiento

UTN - FRM: Paradigmas de Programación - Programación Lógica 7

Page 8: Prog Logic A

Fundamentos del paradigma• Principio de resolución: C1 V p, C2 V ~p => C1 V C2• Teorema: si P Λ Q => Ο entonces P Λ ~Q es insatisfacible• Teorema: si P Λ Q => Ο entonces P Λ Q es insatisfacible• Sean las hipótesis H

1) ~P V ~Q V R (esto es P Λ Q => R)1)  P V  Q V R (esto es P Λ Q => R)2) P3) Q– se agrega a H una 4) ~R – luego de 1) y 2) se obtiene 5) ~Q V R

l d 3) ) b i 6)– luego de 3) y 5) se obtiene 6) R– luego de 4) y 6) se obtiene O

• Se obtuvo la cláusula vacía por lo tanto H Λ ~R es insatisfacible• Se obtuvo la cláusula vacía por lo tanto H Λ ~R es insatisfacible, luego H si lo es

UTN - FRM: Paradigmas de Programación - Programación Lógica 8

Page 9: Prog Logic A

Fundamentos del paradigma

• Sean las hipótesis H1) ~P V ~Q V R (P Λ Q => R)1)  P V  Q V R (P Λ Q => R)2) ~W V R (W => R)3) ~S V W (S => W)) ( )4) P5) S– se agrega a H 6) ~R – de 1) y 6) se obtiene 7) ~P V ~Q ‐ de 2) y 6) se obtiene 7) ~W

de 4) y 7) se obtiene 8) ~Q de 3) y 7) se obtiene 8) ~S– de 4) y 7) se obtiene 8)  Q ‐ de 3) y 7) se obtiene 8)  S– falló ‐ de 5) y 8) se obtiene 9)  O

• Se obtuvo la cláusula vacía por lo tanto H Λ ~R es insatisfacibleSe obtuvo la cláusula vacía por lo tanto H Λ R es insatisfacible, luego H si lo es

UTN - FRM: Paradigmas de Programación - Programación Lógica 9

Page 10: Prog Logic A

Fundamentos del paradigma• Àrbol de resolución

– Metas y submetas• Comienza con la cláusula que se quiere probar (objetivo o meta)Comienza con la cláusula que se quiere probar (objetivo o meta)• Trabaja secuencialmente hacia delante (fordward chaining), resolviendo sub‐objetivos• Cuando falla en un objetivo, vuelve hacia atrás (backward chaining)

Objetivo: r

de 1) y 6) se obtiene 7) ~P VV ~Q de 2) y 6) se obtiene 7) ~W

de 4) y 7) se obtiene 8) ~Q d 3) 7) bti 8) Sde 4) y 7) se obtiene 8) Q de 3) y 7) se obtiene 8) ~S

UTN - FRM: Paradigmas de Programación - Programación Lógica 10

de 5) y 8) se obtiene 9) Ofalló

Page 11: Prog Logic A

Lenguaje Prolog• Paradigma de programación lógica• PROLOG (PROgramming in LOGic) 1972PROLOG (PROgramming in LOGic) 1972

– Alain Coulmerauer y Philippe Roussel (Universidad de Aix‐Marseille)

– Principio de resolución de Kowalski (Universidad de Edinburgh)

D t d d t• Demostrador de teoremas• Principales aplicaciones

Sistemas expertos– Sistemas expertos– Procesamiento de lenguaje natural– Bases de datos deductivasBases de datos deductivas– En general, sistemas de búsquedas de objetivos

UTN - FRM: Paradigmas de Programación - Programación Lógica 11

Page 12: Prog Logic A

Sintaxis ProloggUn programa Prolog es un conjunto de cláusulas de Horn

• Forma generalC :‐ C1, C2, …, Cn si n > 0 es una regla; si n = 0 es un hecho1 2 n

• Sintaxis

<predicado> ::= <nombre>( <arg> { , <arg> } )

<hecho> ::= <predicado> .

<regla> ::= <predicado> :‐ <condiciones> .

<condiciones> ::= <exp‐log> { , <exp‐log> }

<exp‐log> ::= <exp‐relac> | <predicado>

• Un predicado representa una relación entre términos

– doble(X, Y) Y representa el doble de X (semántica subjetiva)p j

UTN - FRM: Paradigmas de Programación - Programación Lógica 12

Page 13: Prog Logic A

Elementos del lenguaje• Objetos de datos = términos

• Functores = términos de función• Functores = términos de función– Aridad: si f es el nombre de un functor, f/m denota que tiene aridadm. Ejemplo: 

padre(X, juan)  padre/2p ( , j ) p /

– El paréntesis debe abrir inmediatamente después del nombre del functor (sin espacios)

• Operadores: precedencia y asociatividad– current_op(X, Y, +) => X = 500, Y = fx (prefijo) ; X = 500, Y = yfx

– current_op(X, Y, not) => X = 900 , Y = fy

– op(100, xf, atom) => yes

• Variables: comienzan con letra mayúscula o con guión bajo

• Operadores lógicos: ,  ;  not

UTN - FRM: Paradigmas de Programación - Programación Lógica 13

Page 14: Prog Logic A

Objetos de datos PrologObjetos

EstructuradosSimples

VariablesConstantesEstructuras Listas

ÁtomosC d NúÁtomosCadenas Números

Enteros

Símbolos

Flotantes

Especiales

UTN - FRM: Paradigmas de Programación - Programación Lógica 14

Page 15: Prog Logic A

Caso de estudio

juan►►Consultas simples y conjuntivasConsultas simples y conjuntivas

carlos luis

padre(padre(juanjuan, , carloscarlos). ). padre(padre(juanjuan, , luisluis).).padre(padre(luisluis daviddavid))

david omar

padre(padre(luisluis, , daviddavid).).padre(padre(luisluis, , omaromar).).padre(padre(omaromar, enrique)., enrique).

enrique pedromarcos

p (p ( , q ), q )padre(padre(omaromar, , pedropedro).).padre(padre(daviddavid, marcos)., marcos).

hijo(X, P) :‐ padre(P, X).hermano(X, Y) :‐ padre(Z, X), padre(Z, Y) , X \== Y.

victorpadre(padre(pedropedro, , victorvictor).).

( , ) p ( , ), p ( , ) , \primo(X, Y) :‐ padre(Z, X), padre(W, Y), hermano(Z, W).ancestro(X, Y) :‐ padre(X, Y).ancestro(X, Y) :‐ padre(X, Z), ancestro(Z, Y).p

UTN - FRM: Paradigmas de Programación - Programación Lógica 15

Page 16: Prog Logic A

Consultas• Formas de consulta

– Test (+): describe los términos para los cuales tiene éxito– Generador (*): produce una secuencia de respuestas– Sea la consulta padre(A, B)

• (+, +) test que comprueba si A es padre de B• (+, *) generador acotado que produce en B los hijos de A• (* +) generador único que produce en A el padre de B( , +) generador único que produce en A el padre de B• (*, *) generador acotado que produce pares padre/hijo

• Ejecución de consultasj– Probar que una meta es satisfacible– Búsqueda de hechos y reglas en forma descendente– Ejecución de sub‐metas de izquierda a derecha– Lo que no está en la base de conocimientos, se supone falso

UTN - FRM: Paradigmas de Programación - Programación Lógica 16

Page 17: Prog Logic A

Instanciación,matching,unificación

• Instanciación: forma en que una variable adquiere un valor• Matching: búsqueda de coincidencias para comparar dosMatching: búsqueda de coincidencias para comparar dos 

términos• Unificación: es el proceso que se implementa por matching eUnificación: es el proceso que se implementa por matching e 

instanciación– Todo predicado cuyos argumentos no son variables, debe p y g ,coincidir con un axioma, para considerarlo como verdadero

– Si un predicado contiene una variable, esta se instancia con un valor determinado

• Este valor se obtiene buscando en la base de conocimiento y seleccionando todosaquellos predicados que coinciden con esteaquellos predicados que coinciden con este

• El proceso de identificación continua con el valor instanciado para la variable, hasta probar la verdad o falsedad del predicado

UTN - FRM: Paradigmas de Programación - Programación Lógica 17

Page 18: Prog Logic A

Instanciación,matching,unificación• Operador ‘=‘ (instancia un valor) y predicado ‘is’ (evalúa expresiones)

?‐ X is 3 + 4. => X = 7 ?‐ 4 is 1 + 3. => yes? 4 is 1 + 3. > yes?‐ 3 + 4 == 5 + 2. => no?‐ 3 + 4 == 3 + 4. => yes? X 2 + 3 > X 2 + 3?‐ X = 2 + 3. => X = 2 + 3?‐ a(1, 2) = a(X, Y). => X = 1, Y = 2?‐ a(1, 2) = a(2, 3). => no?‐ f(X, X) = f(4, Y). => X = 4, Y = 4

• Para los hechosp(X, 1). (hecho universal)p(X, 1). (hecho universal)p(1, 2).?‐ p(1, Z). => Z = 1, Z = 2? p(1 1) > yes?‐ p(1, 1). => yes?‐ p(X, X). => X = 1?‐ p(1, 2), p(Z,Z). => Z = 1

UTN - FRM: Paradigmas de Programación - Programación Lógica 18

Page 19: Prog Logic A

Inducción y recursión• Modus ponens

– P– P => QP => Q– Q

• Inducción– Base inductiva  axioma– Hipótesis inductiva recurrencia

• El conjunto de los naturales N0 εN base inductivaluego X εN si puedo verificar la base

entonces debo verificar que natural(X ‐ 1) εN

– Definir en Prolog: natural(X) que verifica si X εN

UTN - FRM: Paradigmas de Programación - Programación Lógica 19

Page 20: Prog Logic A

Inducción y recursión• Definiciones

!0 = 1 (base inductiva)( )

!1 = 1 * !0

!2 = 2 * !1!2 = 2   !1

V X Z+ !X X * !(X 1) (hi ót i i d ti )V X ε Z+ :  !X = X * !(X – 1) (hipótesis inductiva)

• Algoritmo recursivo

si X = 0 entonces f(X) = 1

si X > 0 Λ X ε Z+ entonces f(X) = X * f(X ‐ 1)

donde f representa la función factorial f : Z+ Z+

UTN - FRM: Paradigmas de Programación - Programación Lógica 20

Page 21: Prog Logic A

Inducción y recursión

Estilo procedimentalEstilo procedimental Estilo clausalEstilo clausalsi X = 0 entonces si X = 0 entonces

f(X) = 1f(X) = 1f(0, 1)f(0, 1)..f(X, X * Z) f(X, X * Z) ::-- f(X f(X -- 1, Z)1, Z)..( )( )

si X > 0 si X > 0 ΛΛ X X ε ZZ++ entonces entonces f(X) X * f(Xf(X) X * f(X 1)1)

( , )( , ) (( , ), )

f(X) = X * f(X f(X) = X * f(X -- 1)1)

EnEn PrologProlog•• En En PrologPrologfacto(0, 1)facto(0, 1)..facto(X, N) facto(X, N) ::-- T T isis X X -- 11,, facto(T, Z)facto(T, Z),, N N isis X * ZX * Z..

UTN - FRM: Paradigmas de Programación - Programación Lógica 21

Page 22: Prog Logic A

Caso de estudio

?‐ facto(2, X). ?- facto(2, X). => X = 2

facto(0, 1).facto(N, X) :- facto(N – 1, Z), X is N * Z.

facto(2, X) ≠ facto(0, 1)facto(2, X) = facto(2, X) :- facto(1, 1), X is 2 * 1.

( , )

2

facto(2, X) = facto(N, X) :- facto(N–1, Z), X is N *Z.

facto(2 X) = facto(2 X) :- facto(1 Z) X is 2 * Zfacto(2, X) = facto(2, X) :- facto(1, Z), X is 2 * Z.

facto(2, X) facto(2, X) : facto(1, 1), X is 2 1.

facto(2, X) = facto(2, X) : facto(1, Z), X is 2 Z.

facto(1, X) ≠ facto(0, 1)facto(1 Z) facto(1 X) : facto(0 1) X is 1 * 1

1

facto(1, Z) = facto(N, X) :- facto(N–1, Z), X is N *Z.facto(1, Z) = facto(1, X) :- facto(0, Z), X is 1 * Z.

facto(1, Z) = facto(1, X) :- facto(0, 1), X is 1 * 1.

facto(1, Z) = facto(1, X) :- facto(0, Z), X is 1 * Z. 1

UTN - FRM: Paradigmas de Programación - Programación Lógica 22

facto(0, Z) = facto(0, 1)

Page 23: Prog Logic A

Mapeo de funciones en Prolog• Una función f: X1, ..., Xn → X

se escribe como un predicado f con aridad n+1– se escribe como un predicado f con aridad n+1

– f(I1, .., In, O) :‐ ...

• Una función f: X X → X X• Una función f: X1, ..., Xn → Xn+1, .., Xn+k– se escribe como un predicado f con aridad n+k

– f(I I O O ):‐– f(I1, .., In, O1, .., Ok):‐ ...

• Una función f: X1, ..., Xn → Booleanse escribe como un predicado f con aridad n– se escribe como un predicado f con aridad n

– f(I1, .., In):‐...

• Sea h(X) = f( g(X) )• Sea h(X) = f( g(X) )– se escribe h(X, Y) :‐ g(X, Z), f(Z, Y).

UTN - FRM: Paradigmas de Programación - Programación Lógica 23

Page 24: Prog Logic A

Inducción y recursiónEjemplos para resolver

suma(N, S) donde S es la sumatoria de los N primero naturales

divisor(N, D) evaluar si D es el divisor exacto de N (no usar mod)

mcd(X, Y, M) M es el mcd de X e Y (algoritmo de los restos usar resto)

UTN - FRM: Paradigmas de Programación - Programación Lógica 24

U1

Page 25: Prog Logic A

Diapositiva 24

U1 divi(0, D).divi(N, D) :- N >= D, R is N - D, divi(R, D).

resto(0, D, 0).resto(N, D, R) :- N >= D, T is N - D, resto(T, D, R).resto(N, D, N).

mcd(0,Y, Y).mcd(X,Y, R) :- X > Y, T is X mod Y, mcd( T, Y, R).mcd(X,Y, R) :- T is Y mod X, mcd( T, X, R).Usuario, 12/10/2011

Page 26: Prog Logic A

Triángulo de PascalTriángulo de PascalsumaC([X Y] [Z]) : Z is X + YsumaC([X,Y],[Z]) :‐ Z is X + Y.

sumaC([X,Y|L], Z):‐ H is X + Y,

([ | ] )sumaC([Y|L],L2),

Z = [H|L2].

pascal(1,[1]).

pascal(2,[1,1]).

pascal(N, L) :‐ Ant is N ‐ 1,

pascal(Ant,L2),

sumaC(L2,R),

append([1|R],[1],L), !.

UTN - FRM: Paradigmas de Programación - Programación Lógica 25

Page 27: Prog Logic A

Listas•• EjemplosEjemplos

[1][1] [1, 2, 3][1, 2, 3] [][] [a, b][a, b] [“uno”, “dos”][“uno”, “dos”] [234, “dir”, [1, 2, 3]][234, “dir”, [1, 2, 3]][1][1] [1, 2, 3][1, 2, 3] [][] [a, b][a, b] [ uno , dos ] [ uno , dos ] [234, dir , [1, 2, 3]][234, dir , [1, 2, 3]]

•• Operador de lista: Operador de lista: || [cabeza [cabeza || cola]cola]

X = [1, 2, 3]X = [1, 2, 3]

►►[0 [0 || X] => [0, 1, 2, 3]X] => [0, 1, 2, 3]

►►[7, 8 [7, 8 || X] => [7, 8, 1, 2, 3]X] => [7, 8, 1, 2, 3]

??-- [a, b, c, d] = [C [a, b, c, d] = [C | | Q].Q]. => C = a , Q = [b, c, d]=> C = a , Q = [b, c, d][ , , , ] [[ , , , ] [ || Q]Q] , Q [ , , ], Q [ , , ]

??-- [a, b, c, d] = [X [a, b, c, d] = [X | | [Y [Y | | Z]].Z]]. => X = a, Y = b, Z = [c, d]=> X = a, Y = b, Z = [c, d]

?? [a] [C[a] [C || Q]Q] > C a Q []> C a Q []??-- [a] = [C [a] = [C | | Q]Q] => C = a, Q = []=> C = a, Q = []

??-- [] = [C [] = [C | | Q]Q] => no=> no

UTN - FRM: Paradigmas de Programación - Programación Lógica 26

Page 28: Prog Logic A

Listas• Ejemplos de unificación

?‐ [a, B, c, D] = [A, b, C, d]. => B = b, D = d, A = a, C = c[ , , , ] [ , , , ] , , ,

?‐ [a, b, c] = [W | [X | [Y | Z]]]. => W = a, X = b, Y = c, Z = []

?‐ [a | [b | [c  | []]]] = List => List = [a, b, c]

?‐[(a+X), (Y+b)] = [(W+c), (d+b)]. => X = c, Y = d, W = a

?‐ [ [X, a] ] = [b, Y]. => error

?‐ [[a], [B, c], []] = [X, [b, c], Y]. => B = b, X = [a], Y = []

UTN - FRM: Paradigmas de Programación - Programación Lógica 27

Page 29: Prog Logic A

Listas• Ejemplos para resolver

– buscar(P L E): hallar el elemento E ubicado en la posición P en la lista Lbuscar(P, L, E): hallar el elemento E, ubicado en la posición P, en la lista L (uso de fail, variables anónimas)

– union(L1, L2, L3): L3 es la unión de las listas L1, L2

– variaciones(N, L, R): donde R es el conjunto de variaciones sin repetición tomadas de a N en L (usar remove/3)

UTN - FRM: Paradigmas de Programación - Programación Lógica 28

OL1

Page 30: Prog Logic A

Diapositiva 28

OL1 varia(0,_,[]).varia(N, L, [H|Varia]) :- N1 is N - 1, eliminar(H, L, Result), varia(N1, Result, Varia).

Oscar Leon, 20/10/2011

Page 31: Prog Logic A

Términos compuestos• Sean:

gerente( persona(juan, perez, 1283, m) ).empleado( persona(maria lima 3475 f) )empleado( persona(maria, lima, 3475, f) ).empleado( persona(jorge, mendez, 8765, m) ).empleado( persona(pedro, garcia, 1765, m) ).p ( p (p , g , , ) )responsable( persona(juan, perez, 1283, m),

persona(maria, lima, 3475, f) ).

• Consultas?‐ responsable(X, Y).

( )• X = persona(juan, perez, 1283, m) , • Y = persona(maria, lima, 3475, f)

?‐ empleado(persona(X, Y, Z, m)).? empleado(persona(X, Y, Z, m)).• X = jorge , Y = mendez , Z = 8765 ; • X = pedro , Y = garcia , Z = 1765

UTN - FRM: Paradigmas de Programación - Programación Lógica 29

Page 32: Prog Logic A

Términos compuestos• ?‐ [A, B, C] = [23.45, "Hilo", gente(raul, 17)].

A = 23.45, B = “Hilo”, C = gente(raul, 17)

• Sean las siguientes definicionesq(X, a(1, Y)).

r(X, a(1, X)).

• Consultas?‐ q(1, a(Y, 2)). => Y = 1

?‐ r(1, a(1, X)). => X = 1

?‐ r(1, a(1, 2)). => no

?‐ r(Y, a(Y, Y)). => Y = 1

? (Z (Y 2)) Z Y 1?‐ q(Z, a(Y, 2)). => Z = _ , Y = 1

?‐ q(1, a(2, Y)). => no

? q(1 a(1 3)) => yes?‐ q(1, a(1, 3)). => yesUTN - FRM: Paradigmas de Programación

- Programación Lógica 30

Page 33: Prog Logic A

Backtrack• Retrocede a la meta exitosa más reciente, e intenta encontrar otro camino encontrar otro camino

a :‐ …

bb :‐ …

c :‐ …

d :‐ … x :‐ a, b, c, d, e, f.

d :‐ ……

e :‐ …

e :e :‐ ……

f :‐ …

UTN - FRM: Paradigmas de Programación - Programación Lógica 31

Page 34: Prog Logic A

Backtrack• !/0 impide que se haga backtrack, hacia la izquierda de donde aparecede donde aparece

a :‐ …

bb :‐ …

c :‐ …

d :‐ … x :‐ a, b, c, d, !, e, f.

d :‐ ……

e :‐ …

e :e :‐ ……

f :‐ …

UTN - FRM: Paradigmas de Programación - Programación Lógica 32

Page 35: Prog Logic A

Caso de estudiop(X) :‐ a(X).  ?‐ p(X).   => X = 1, X = 2, X =3

p(X) :‐ b(X), c(X), d(X), e(X).p( ) ( ), ( ), ( ), ( )

p(X) :‐ f(X).

a(1).p(X)

b(1).

c(1).( )b(2).

c(2).

a(1) f(3)b(X), c(X), d(X), e(X)

d(2).

e(2).

f(3) b(1) (1) d(?)f(3). b(1), c(1), d(?) b(2), c(2), d(2), e(2)

UTN - FRM: Paradigmas de Programación - Programación Lógica 33

Page 36: Prog Logic A

Caso de estudiop(X) :‐ a(X).  ?‐ p(X). => X = 1

p(X) :‐ b(X) c(X) ! d(X) e(X)p(X) : b(X), c(X), !, d(X), e(X).

p(X) :‐ f(X).

a(1). p(X)( )

b(1).

c(1).

p( )

b(2).

c(2). a(1) b(X), c(X), d(X), e(X)

d(2).

e(2).

f(3).b(1), c(1), d(?)

UTN - FRM: Paradigmas de Programación - Programación Lógica 34

Page 37: Prog Logic A

Predicados útiles•• =../2=../2

??-- X = [mas 2 3]X = [mas 2 3] => X = mas(2 3)=> X = mas(2 3)?? X =.. [mas, 2, 3].X =.. [mas, 2, 3]. => X = mas(2, 3)=> X = mas(2, 3)??-- unionunion(L1, L2, L3) =.. L.(L1, L2, L3) =.. L. => L = [=> L = [unionunion, L1, L2, L3], L1, L2, L3]

•• -->/2>/2A :A :-- BB --> C; D.> C; D. sisi BB entoncesentonces CC sinosino DDA :A : B B > C; D. > C; D. sisi B B entoncesentonces C C sinosino DD

•• repeatrepeat/0,/0, repeatrepeat/1/1repeatrepeat/0, /0, repeatrepeat/1/1Repite infinita o Repite infinita o nn veces, los predicados posterioresveces, los predicados posterioresCualquier predicado precedente no será Cualquier predicado precedente no será alcanzado, hasta alcanzado, hasta q p pq p p ,,satisfacer las satisfacer las nn repeticionesrepeticiones

UTN - FRM: Paradigmas de Programación - Programación Lógica 35

Page 38: Prog Logic A

Predicados útiles• forall/2

– forall(P, Q), para todas las instancias del predicado P, evalúa el predicado Q

• solution/2

– solution(P, N), evalúa el predicado P hasta encontrar la solución número N

fi d ll/3• findall/3

– findall(T, C, L), encuentra todas las instancias del término T para la cual el predicado C es verdad, e inserta los valores T en la lista L,

• write/1

– write(X), escribe el valor de X en la salida

• read/1

– read(X), lee de consola un valor para X, la entrada debe terminar con ‘.’

• atom/1• atom/1

– atom([]) => True atom([1, 2]) => False

UTN - FRM: Paradigmas de Programación - Programación Lógica 36

o3

U3

U4

Page 39: Prog Logic A

Diapositiva 36

o3 forall(padre(X, Y), write(Y)).oleon, 26/06/2007

U3 solution(padre(luis, X), 2).Usuario, 15/10/2010

U4 findall(X, padre(juan, X), L).Usuario, 15/10/2010