Prog Logic A
-
Upload
matias-tomasini -
Category
Documents
-
view
39 -
download
0
Transcript of 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
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
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
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
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
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
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
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
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ó
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
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
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
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
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
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
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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